2017-04-01 2 views

Antwort

1

Sie können die Berechtigung für den Begrüßungsbildschirm oder den ersten Bildschirm verwenden.

wenn mehrere Erlaubnis dann alle einmal behandeln.

Wenn der Benutzer keine Berechtigung verweigert, dann zeigt er eine Nachricht, dass einige Berechtigungen erforderlich sind.

hoffe, es wird dir helfen.

Hier ist ein Beispiel, wie Sie mit mehreren Berechtigungen umgehen können.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 


if(checkAndRequestPermissions()){ 
    //all permission granted 
}else{ 
    //require all permission. 
} 

} 


private boolean checkAndRequestPermissions() { 
    int camerapermission = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); 
    int phonestate = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE); 
    int location = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); 
    int recordaudio = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO); 
    int permissionLocation = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); 


    List<String> listPermissionsNeeded = new ArrayList<>(); 

    if (camerapermission != PackageManager.PERMISSION_GRANTED) { 
     listPermissionsNeeded.add(Manifest.permission.CAMERA); 
    } 
    if (phonestate != PackageManager.PERMISSION_GRANTED) { 
     listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE); 
    } 
    if (location != PackageManager.PERMISSION_GRANTED) { 
     listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION); 
    } 
    if (recordaudio != PackageManager.PERMISSION_GRANTED) { 
     listPermissionsNeeded.add(Manifest.permission.RECORD_AUDIO); 
    } 

    if (permissionLocation != PackageManager.PERMISSION_GRANTED) { 
     listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    } 
    if (!listPermissionsNeeded.isEmpty()) { 
     ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS); 
     return false; 
    } 
    return true; 
} 



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

    switch (requestCode) { 
     case REQUEST_ID_MULTIPLE_PERMISSIONS: { 

      Map<String, Integer> perms = new HashMap<>(); 

      perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED); 

      // Fill with actual results from user 
      if (grantResults.length > 0) { 
       for (int i = 0; i < permissions.length; i++) 
        perms.put(permissions[i], grantResults[i]); 
       // Check for both permissions 
       if (perms.get(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED 
         && perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED 
         && perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
         && perms.get(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED 
         && perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED 
         ) { 
        Log.d(TAG, "camera & location services permission granted"); 

        // here you can do your logic all Permission Success Call 
         moveToNxtScreen(); 

       } else { 
        Log.d(TAG, "Some permissions are not granted ask again "); 
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) || ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
         showDialogOK("Some Permissions are required for Open Camera", 
           new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, int which) { 
             switch (which) { 
              case DialogInterface.BUTTON_POSITIVE: 
               checkAndRequestPermissions(); 
               break; 
              case DialogInterface.BUTTON_NEGATIVE: 
               // proceed with logic by disabling the related features or quit the app. 
               dialog.dismiss(); 
               break; 
             } 
            } 
           }); 
        } else { 
         explain("You need to give some mandatory permissions to continue. Do you want to go to app settings?"); 
        } 
       } 
      } 
     } 
    } 

} 

private void showDialogOK(String message, DialogInterface.OnClickListener okListener) { 
    new AlertDialog.Builder(this) 
      .setMessage(message) 
      .setPositiveButton("OK", okListener) 
      .setNegativeButton("Cancel", okListener) 
      .create() 
      .show(); 
} 

private void explain(String msg) { 
    final android.support.v7.app.AlertDialog.Builder dialog = new android.support.v7.app.AlertDialog.Builder(this); 
    dialog.setMessage(msg) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
        Utils.startInstalledAppDetailsActivity(LoginActivity.this); 
       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
        dialog.create().dismiss(); 
        finish(); 
       } 
      }); 
    dialog.show(); 
} 
+0

Thanx Sachin, aber was, wenn Benutzer verweigern Erlaubnis nach Splash-Screen von den Einstellungen? also habe ich überall nachschauen. –

+0

Dann müssen Sie jedes Mal überprüfen, ob die Erlaubnis erteilt wurde oder nicht. Wenn die Berechtigung verweigert wird, zeigen Sie die Toast-Berechtigung an und öffnen Sie den Berechtigungseinstellungsbildschirm. Überprüfen Sie, wie der Berechtigungsbildschirm http://stackoverflow.com/a/32983128/3416642 geöffnet wird – Sach

1

zwei Variablen erstellen wie

private static final int REQUEST_CODE_PERMISSION = 1; 
String mPermission = Manifest.permission.ACCESS_FINE_LOCATION; 

nach Methode erstellen wie diese

private void getPermission() { 
    if(Build.VERSION.SDK_INT>= 23) { 

     if (checkSelfPermission(mPermission) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(MainActivity.this, 
        new String[]{mPermission, 
        }, 
        REQUEST_CODE_PERMISSION); 
      return; 
     } 

     else 
     { 
      /* your code if permission already access 
     } 
    } 
} 

Nach Überschreibung onRequestPermissionsResult Verfahren wie dieses

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    Log.e("Req Code", "" + requestCode); 
    if (requestCode == REQUEST_CODE_PERMISSION) { 
     if (grantResults.length == 1 && 
       grantResults[0] == MockPackageManager.PERMISSION_GRANTED) { 
      methodRedirect(); 
     } 
     else{ 
      this.getPermission(); 
     } 
    } 
} 

Auf diese Weise sogar die Erlaubnis Benutzer verweigern , wird es wieder zeigen.

Sie können mehrere Berechtigungen wie folgt verwalten.

Verwandte Themen