2017-05-19 2 views
-1

런타임 권한으로 작업하고 있습니다. 이미지가있는 보고서를 만드는 동안 활동 클래스에있을 때 권한이 변경되면 응용 프로그램이 손상되고 데이터가 손실됩니다. OnsaveInstance을 사용했지만 실제로 원하는 것은 수행하지 않습니다. 누군가가 설정에서 앱 권한을 변경하고 보고서를 저장할 때 앱을 다시 시작하고 싶습니다.응용 프로그램 권한을 변경하면 다시 호출 된 oncreate()가 발생합니다.

  • 권한 변경시 어떤 메소드가 호출됩니까?

  • 권한이 백그라운드에서 변경된 것을 어떻게 알 수 있습니까?

답변

1

이 Q에서 어떤 대답을 시도 할 수 있습니다 this answer

추천하고 응용 프로그램을 다시 시작 당신은, 당신의 활동의 시작 또는 재개에 권한을 확인할 수 있습니다/ANS thread, 여기에 활동을 재개 허용 대답 중 하나 내가 그 권한을 알고 어떻게

Intent i = getBaseContext().getPackageManager() 
      .getLaunchIntentForPackage(getBaseContext().getPackageName()); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
1

배경에서 변경됩니다.?

설정에서 사용자가 이전에 부여한 사용 권한을 제거하면 프로세스가 즉시 종료됩니다. 다음에 앱을 실행할 때 권한이 변경되었음을 알 수 있습니다.

설정에서 사용자가 이전에 부여하지 않은 권한을 사용자에게 부여한 경우 프로세스는 그대로 유지되지만 새 권한에 대해서는 알지 못합니다. 적절한 시점에 checkSelfPermission()으로 전화하여 이전에 없었던 허가를 받았는지 확인할 수 있습니다.

1

현재 사용 권한이 있는지 확인하려면 ContextCompat.checkSelfPermission()을 사용하십시오 (자세한 내용은 the developer docs 참조).

백그라운드 스레드에서 권한이 필요한 경우 작업을 수행하기 전에 권한이 있는지 확인하십시오. 권한이 없으면 작업을 건너 뛸 수 있습니다. 계속하면 코드는 SecurityException을 던질 가능성이 큽니다.

필요한 사용 권한이없는 경우 처리 방법은 사용 사례에 따라 다릅니다. 권한 누락으로 인해 백그라운드 작업을 수행 할 수 없음을 사용자에게 알리는 시스템 알림을 만들 수 있습니다. 사용자가 알림을 탭하면 작업을 다시 시도하기 전에 사용자에게 권한을 요청할 수 있습니다. 사용자에게 권한을 요청하는 방법은 동일한 개발자 문서를 참조하십시오.

백그라운드 작업을 중단해도 괜찮 으면이를 할 수는 있지만 사용자 인터페이스에서 백그라운드 작업에 누락 된 권한이 필요하다는 것을 보여주고 사용자에게 그렇게 권한을 부여 할 것인지 묻는 것이 좋습니다. (선택적) 백그라운드 작업은 그 작업을 수행 할 수 있습니다.