Android

안드로이드(android) onActivityResult() 메소드가 호출되지 않을 때 유의점

onActivityResult() 호출되지 않을 때 유의점

앱을 개발하다보면 새로운 ACTIVITY나 FRAGMENT 창을 호출하여 호출한 창에서 결과값을 리턴 받아야 하는 경우가 있다.  가령, 사용자가 시스템 설정을 변경 후 해당 설정창을 닫았을때,  메인창에서  해당 창이 닫혔음을 인지하고 사용자가 설정한 시스템 설정값을 체크 후 토글 버튼이라든가, 체크 박스의 값을 변경해 주어야할 경우가 있다.

아래 예시 코드는 네트워크 및 인터넷 설정을 호출하는 코드이다.  사용자에게 비행기 모드를 켜거나 끌 수 있도록 유도하기위해 개발하였다. 비행기 모드를 프로그래밍으로 직접으로 제어가 불가능해졌다. 아마도 안드로이드 7이 나오면서 부터 전면적으로 불가능하게 변경되었던 것 같다. 그럼에도불구하고 사용자에게 요청을 해야하는 경우가 생긴다.

    private void callSettingAirplaneMode(){
        try {
            Intent intent = new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivityForResult(intent,777);
        }
        catch (ActivityNotFoundException e){ 
            Intent intent1 = new Intent("android.settings.WIRELESS_SETTINGS");
            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
            startActivityForResult(intent1,777);
        }
    }

다음 코드는 onActivityResult()메소드를 오버라이드한 코드이다.

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        Log.d("TAG", "onActivityResult 호출 : requestCode : " +requestCode);
        if (requestCode == 777) {
            if(switch7!=null) {
                if (isTurnOnAirplaneMOde()) switch7.setChecked(true); //비행기 모드가 켜져 있는가?
                else switch7.setChecked(false);
            }
        } 
    }

어떻게 된 영문인지 아무리 설정창을 닫아도 onActivityResult()메소드가 호출되지않았다.  호출하는 코드에 문제가 있었다.  인텐트 설정시 플래그 값이 문제였다. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  이것은 새로운 작업으로 분류를 하게된다. 그래서 그창을 닫아도 메인창으로 돌아오지 못하는 것이다. 설정한 플래그 값을 제거하면 정상적으로 호출됨을 확인할 수 있다.

    private void callSettingAirplaneMode(){
        try {
            Intent intent = new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS); 
            startActivityForResult(intent,777);
        }
        catch (ActivityNotFoundException e){ 
            Intent intent1 = new Intent("android.settings.WIRELESS_SETTINGS"); 
            startActivityForResult(intent1,777);
        }
    }

[관련자료]

[Android] onBackPressed() 호출시(뒤로가기 버튼 클릭) onActivityResult()에서 데이터를 넘겨 받지 못 할때!!!

OnActivityResult not working (Android)

https://forums.xamarin.com/discussion/3885/onactivityresult-not-being-called-after-camera-intent

https://kiwinam.com/posts/23/android-start-activity-for-result/

Leave a Reply

error: Content is protected !!