2016-04-18 2 views
1

Ich füge meiner App bestimmte Berechtigungen hinzu, um beispielsweise den Zugriff auf die Kamera zu erlauben und alles funktioniert einwandfrei. aber wenn ich die App zu minimieren und die Erlaubnis zu deaktivieren, dann öffnen Sie die App, stürzt die App ohne mich zu fragen, die Erlaubnis wieder zu aktivieren (bis ich die App schließe und dann öffnen). Wie kann ich diesen Fehler beheben, so dass die App nicht abstürzt und erneut um Erlaubnis oder sicheren Neustart bittet, um nach Berechtigungen zu fragen.Android Marshmallow Permission Error

hier ist mein Code

in der Haupttätigkeit:

onCreate:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.CAMERA}, 
        GlobalVariables.MY_PERMISSIONS_REQUEST_CAMERA); 
     } 


@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     switch (requestCode) 
     { 

      case GlobalVariables.MY_PERMISSIONS_REQUEST_CAMERA: 
      { 
       if (grantResults.length <= 0 
         || grantResults[0] != PackageManager.PERMISSION_GRANTED) { 
        globalVariables.ShowOKAlert("Error","Please Accept All Requested Permissions or the app wont function properly",this,false); 
       } 
       return; 
      } 
     } 
    } 

die Aktivität implementiert ActivityCompat.OnRequestPermissionsResultCallback

+0

Beachten Sie, wenn Sie die Berechtigung in den Einstellungen deaktivieren, Der Prozess Ihrer App wird beendet. – CommonsWare

+0

danke @CommonsWare, ich denke, aufgrund dieser habe ich einige Fehler in der SQLITE-Datenbank –

+0

Versuchen Sie, es kann Ihnen helfen: -http: //stackoverflow.com/a/41221852/5488468 –

Antwort

0

Sie, dass die Genehmigung in onCreate überprüfen. Wenn Sie die App erneut minimieren und maximieren, wird diese Methode nicht aufgerufen.

Vielleicht sollten Sie diese Erlaubnis im exact-Punkt, wo Sie es brauchen, oder zumindest in onResume überprüfen, die sicherlich wieder aufgerufen wird, wenn Sie Ihre App wieder öffnen.

Aufruf in onResume stellen Sie sicher, dass die App weiterhin funktioniert, auch wenn der Benutzer die Erlaubnis in einem anderen Fenster mit dem geteilten Bildschirm deaktiviert (Android N-Funktion).

+0

ok danke werde das versuchen. aber der Fehler erscheint, sobald ich die App maximieren ... d. Ich habe die Kamera noch nicht gestartet und war immer noch in der Hauptaktivität –

+0

können Sie den Stack-Trace veröffentlichen? – Massimo

+0

im Stack-Trace, der Fehler, den ich erhalte, wenn ich die Erlaubnis, die ich habe (Kamera, Ort, Speicher) habe, ist java.lang.NullPointerException: Versuch, die virtuelle Methode aufzurufen 'boolean android.database.sqlite.SQLiteDatabase.isOpen()' auf einen Null-Objektreferenz, die keinen Sinn macht –

0

Der einfache Weg, dies zu erreichen, können Sie sehen, direkte statische Methode ActivityCompat

public static void requestPermissions(final @NonNull Activity activity, 
      final @NonNull String[] permissions, final int requestCode) 

hier zu verwenden, was Sie für diese

-- Activity Instance

-- String array of permissions

-- a user defined request code haben erforderlichen Parameter

Nutzungs

definieren globale Variablen

//Run-time permissions for MarshMallow + 
    public final String[] PERMISSION_ALL = { 
      Manifest.permission.ACCESS_FINE_LOCATION, 
      Manifest.permission.ACCESS_COARSE_LOCATION, 
      Manifest.permission.CAMERA, 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE 
    }; 
    //validateRequestPermissionsRequestCode requires requestCode to be of 8 bits, i.e. range: 0-255. 
    public final int PERMISSION_REQUEST_CODE = 100; 

schließlich in Ihrer Tätigkeit oncreate() Methode können Sie statische Funktion über

public class MainActivity extends AppCompatActivity 
{ 
    //your code here 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     //do other code work 

     super.onCreate(savedInstanceState); 

     int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
     if (currentapiVersion >= android.os.Build.VERSION_CODES.M) 
     { 
      ActivityCompat.requestPermissions(this, PERMISSION_ALL, PERMISSION_REQUEST_CODE); 
     } 

     //do other code work 
    } 

    //your code here 
} 

Und Sie sind .... done erwähnt nennen

Für mehr Info Click here abou t Android Berechtigungen zur Laufzeit

1

Schritt 1:

String[] permissions = new String[]{ 
    Manifest.permission.INTERNET, 
    Manifest.permission.READ_PHONE_STATE, 
    Manifest.permission.READ_EXTERNAL_STORAGE, 
    Manifest.permission.WRITE_EXTERNAL_STORAGE, 
}; 

Schritt 2: -

private boolean checkPermissions() { 
    int result; 
    List<String> listPermissionsNeeded = new ArrayList<>(); 
    for (String p : permissions) { 
     result = ContextCompat.checkSelfPermission(this, p); 
     if (result != PackageManager.PERMISSION_GRANTED) { 
      listPermissionsNeeded.add(p); 
     } 
    } 
    if (!listPermissionsNeeded.isEmpty()) { 
     ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 100); 
     return false; 
    } 
    return true; 
} 

Schritt 3:

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    if (requestCode == 100) { 
     if (grantResults.length > 0 
      && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     // do something 
     } 
     return; 
    } 
}