Ich versuche, Runtime-Berechtigung zu implementieren, aber es gibt einige Probleme, wenn FragmentActivity
onRequestPermissionResult()
empfangen. Die checkPermissions()
-Methode funktioniert sehr gut, aber onRequestPermissionResult()
wird niemals nach Benutzer zulässig oder verweigerte Berechtigungen aufgerufen.onRequestPermissionsResult() wird nie aufgerufen in FragmentActivity
Wenn das Systemdialogfeld zum Anfordern der Berechtigung angezeigt wird, wird MyActivity.onDestroy()
nie aufgerufen. Ist es für dieses Problem relevant?
Ich habe bereits versucht, this one und another one zu folgen, aber ich glaube, ich habe etwas verpasst.
Mein Gerät ist Nexus 5X (Android 6.0) und Target SDK-Version ist 23 Mindest Unterstützung SDK Version 15. Natürlich, ich schrieb Berechtigungen erforderlich, in AndroidManifest.xml
und hinzugefügt v23 Support-Bibliotheken in build.gradle.
Dies ist mein Code:
public class MyActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkPermissions();
}
private void checkPermissions(){
String[] dangerousPermissions = {
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.GET_ACCOUNTS,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
};
for(String permission : dangerousPermissions){
if (!hasPermission(permission)) {
Log.e("permission.debug", "need to grant " + permission);
ActivityCompat.requestPermissions(this, dangerousPermissions, 4);
}
}
}
public boolean hasPermission(String permission){
return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d("permission.debug", " request code " + requestCode);
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == 0 && Manifest.permission.READ_PHONE_STATE.equals(permissions[i])) {
initiate();
}
}
}
}
Dies ist für meinen Code log:
E/permission.debug: need to grant android.permission.READ_PHONE_STATE
E/permission.debug: need to grant android.permission.GET_ACCOUNTS
E/permission.debug: need to grant android.permission.WRITE_EXTERNAL_STORAGE
E/permission.debug: need to grant android.permission.RECORD_AUDIO
Danke.
Könnten Sie bitte Ihre logcat teilen? –
Ich habe versucht, einige Protokolle für diesen Code zu bekommen, es gab keine Fehler oder Warnungen. Es ist komisch. –
Sie finden eine Antwort auf diese [link] (https://stackoverflow.com/questions/32714787/android-m-permissions-onrequestpermissionsresult-not-being-belled) –