Ich habe ein Projekt, in dem ich beim Start 2 Berechtigungen anfordern. Im Debugging funktioniert es wie vorgesehen, bis es den zweiten Aufruf an requestPermissions
macht. Sobald dies der Fall ist, feuert der erste die onRequestPermissionsResult
mit einem leeren grantResults
Array.Aufruf requestPermissions zweimal auf benutzerdefinierte Kernelaufrufe onRequestPermissionsResult vor Benutzerantwort
Dies funktionierte gut bis heute. Das einzige, was mir einfällt, sind die Updates, die ich heute gemacht habe. Ich habe die Android SDK Platform Tools 23.1 aktualisiert und meinen Mac auf El Capitan aktualisiert.
Kann mir jemand helfen, was zu reparieren?
-Code folgt:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blank_layout);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasCameraPermissions = checkSelfPermission(android.Manifest.permission.CAMERA);
if (hasCameraPermissions != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION_CODE);
}
int hasStoragePermissions = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasStoragePermissions != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION_CODE);
}
if (hasCameraPermissions == PackageManager.PERMISSION_GRANTED && hasStoragePermissions == PackageManager.PERMISSION_GRANTED) {
startCameraIntent();
}
} else {
startCameraIntent();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CAMERA_PERMISSION_CODE:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.camera_denied, Toast.LENGTH_LONG).show();
quitAfter5();
}
break;
case REQUEST_STORAGE_PERMISSION_CODE:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.storage_denied, Toast.LENGTH_LONG).show();
quitAfter5();
}
break;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasCameraPermissions = checkSelfPermission(android.Manifest.permission.CAMERA);
int hasStoragePermissions = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasCameraPermissions == PackageManager.PERMISSION_GRANTED && hasStoragePermissions == PackageManager.PERMISSION_GRANTED) {
startCameraIntent();
}
}
}
EDIT :: Die Veränderung, die dies zu Absturz verursacht, war die Tatsache, dass ich die angepassten Kernel ElementalX auf meinem Nexus 5 ein paar Tage zuvor installiert war. Ich habe das Problem erst gestern auf dem Nexus 6 meines Bruders mit demselben Kernel bestätigt. Ich werde dem Kernel-Entwickler eine E-Mail schreiben, um zu sehen, was er darüber sagt.
Wie in der Antwort, ist der obige Code wirklich die falsche Methode, die requestPermissions
Methode trotzdem zu verwenden. Also alle machen es einfach und es funktioniert für alle Geräte :)
Um, warum nicht einfach einen Aufruf an 'requestPermissions()'? Es braucht schließlich ein Array von Berechtigungsnamen. – CommonsWare
@CommonsWare Also tut es ... Ich denke, das wird dann funktionieren. Es erklärt immer noch nicht, warum mein Code bis heute funktioniert hat. – RayfenWindspear
@CommonsWare Wenn du das als Antwort postest, akzeptiere ich es. Ich habe Ihren Berechtigungsleitfaden gefunden und habe ihn jetzt verfolgt. Auch ich entdeckte den Grund, warum mein Code jetzt fehlschlägt. Es muss mit dem benutzerdefinierten Kernel zusammenhängen, den ich kürzlich auf meinem Gerät installiert habe. Ich werde einen Fehlerbericht an sie senden müssen, obwohl das Übermitteln einer Liste wirklich ist, wie Berechtigungen überprüft werden sollten. – RayfenWindspear