1
도와 드리겠습니다. 나는이 문서를 어디서나 찾을 수 없다. Android 앱 WRITE_EXTERNAL_STORAGE에서 런타임 권한을 요청하고 있습니다.권한 N 허용 앱이 앱을 죽이는 것을 허용합니다.
Android M에서 예상대로 작동합니다. 나는 '허용'을 누르고 모두 괜찮습니다. Android N에서 '허용'을 클릭하면 내 앱이 종료됩니다. 충돌하지 않고 정지합니다. 로그 캣에서
그것은
Killing 6599:com.myname.myappname/u0a223 (adj 100): permission grant or revoke changed gids
Force removing ActivityRecord{c834991 u0 com.myname.myappname/.MainActivity t1814}: app died, no saved state
Destroying surface Surface(name=Window{bf01619 u0 com.myname.myappname/com.myname.myappname.MainActivity}) called by com.android.server.wm.WindowStateAnimator.destroySurface:-1 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:-1 com.android.server.wm.WindowState.removeLocked:-1 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:-1 com.android.server.wm.WindowManagerService.removeWindowLocked:-1 com.android.server.wm.WindowManagerService.removeWindowLocked:-1 com.android.server.wm.AppWindowToken.removeAllWindows:-1 com.android.server.wm.AppWindowToken.removeAppFromTaskLocked:-1
내가 발견 '권한 부여 또는 변경 GID를 취소'PackageManagerService.java
private static final String KILL_APP_REASON_GIDS_CHANGED = "permission grant or revoke changed gids";
그리고
final int result = permissionsState.grantRuntimePermission(bp, userId);
switch (result) {
case PermissionsState.PERMISSION_OPERATION_FAILURE: {
return;
}
case PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED: {
mHandler.post(new Runnable() {
@Override
public void run() {
killSettingPackagesForUser(sb, userId, KILL_APP_REASON_GIDS_CHANGED);
}
});
에서 안드로이드 소스 코드를 살펴보면 보여줍니다
잘 작동하는 데 사용 된 응용 프로그램 코드는 다음과 같습니다.
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
그리고
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
if (requestCode == 1) {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// do stuff
}
앱을 살해하는 이유 누군가가 나에게 설명 할 수 있습니까? 프로그래밍 방식으로 앱을 다시 시작하려면 어떻게 잡을 수 있을까요?
어떤 API 수준을 점검하고 있습니까? 'API 레벨 23 '아래에서는 런타임 권한을 요청하지 않습니다. – Piyush
내 생각 엔이 장치의 버그입니다. 사용자가 설정에서 권한을 취소하면 프로세스가 종료되지만 앱이나 설정에서 'requestPermissions()'에 의해 트리거되는지 여부에 관계없이 사용자가 권한을 부여하면 종료되지 않아야합니다. 런타임 권한을 요구하는 기존 코드를 사용해보십시오. 예를 들어, [내 책] (https://commonsware.com/Android)의 런타임 권한을 사용하는 샘플 앱 (예 : [this one] (https://github.com/commonsguy/cw-omnibus/tree/) 마스터/권한/자습서/마침/RuntimePermTutorial))에서 설명하는 동작을 보여줍니다. – CommonsWare
@Piyush Correct. 이것은 API 레벨 25에 대한 런타임 권한을 요청할 때 발생합니다. –