2016-04-22 27 views
2

我想只爲棉花糖添加運行時權限,因爲它會使我的應用程序在Android棉花糖設備上崩潰,否則它的工作正常。是否可以一次添加多個權限?我已經編寫了攝像頭權限代碼,但是僅針對Android Marshmallow要求運行時權限?

我已經爲單個權限編寫了代碼並且工作正常。

private void requestpermissioncamera() 
{ 
final List<String> permissionsList = new ArrayList<String>(); 
if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_CAMERA)) permissionsNeeded.add("Camera"); 
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),PERMISSION_REQUEST_CODE); 
return; 
} 

此功能用於檢查天氣許可是否被授予。

private boolean checkPermission(){ 
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA); 
if (result == PackageManager.PERMISSION_GRANTED){ 
return true; 
} else { 
return false; 
} 
} 
+0

https://www.learn2crack.com/2015/10/android-marshmallow-permissions.html –

回答

2

很容易一次獲得多個權限。

我希望下面的代碼可以幫助您授予多個權限。

private void requestpermissioncamera() 
{ 
    List<String> permissionsNeeded = new ArrayList<String>(); 

    final List<String> permissionsList = new ArrayList<String>(); 
    if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION)) 
permissionsNeeded.add("GPS"); 
    if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS)) 
permissionsNeeded.add("Read Contacts"); 
    if (!addPermission(permissionsList, Manifest.permission.WRITE_CONTACTS)) 
permissionsNeeded.add("Write Contacts"); 
    if(!addPermission(permissionsList,Manifest.permission.CAMERA)) 
permissionsNeeded.add("Camera"); 
    if(!addPermission(permissionsList, Manifest.permission.ACCESS_NOTIFICATION_POLICY)) 
permissionsNeeded.add("push Notification"); 

    if (permissionsList.size() > 0) { 
     if (permissionsNeeded.size() > 0) { 
     // Need Rationale 
     String message = "You need to grant access to " + permissionsNeeded.get(0); 
     for (int i = 1; i < permissionsNeeded.size(); i++) 
     message = message + ", " + permissionsNeeded.get(i); 
     showMessageOKCancel(message,new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
        } 
       }); 
      return; 
     } 
     requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
     return; 
} 
@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
    case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: 
    { 
    Map<String, Integer> perms = new HashMap<String, Integer>(); 
    // Initial 
    perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED); 
    perms.put(Manifest.permission.READ_CONTACTS, PackageManager.PERMISSION_GRANTED); 
    perms.put(Manifest.permission.WRITE_CONTACTS, PackageManager.PERMISSION_GRANTED); 
    perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED); 
    perms.put(Manifest.permission.ACCESS_NOTIFICATION_POLICY, PackageManager.PERMISSION_GRANTED); 

    // Fill with results 
    for (int i = 0; i < permissions.length; i++) 
     perms.put(permissions[i], grantResults[i]); 
    // Check for ACCESS_FINE_LOCATION 
    if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) 
    { 
    // All Permissions Granted 
    // insertDummyContact(); 
    } else { 
    // Permission Denied 
    Toast.makeText(MainActivity.this, "Some Permission is Denied", Toast.LENGTH_SHORT) 
    .show(); 
    } 
    } 
    break; 
    default: 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
} 
+1

謝謝。它對我來說工作得很好。 –

4

當然是了。你可以看到的例子它是如何如下實施:

public String[] PERMISSIONS_STORAGE = { 
     Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE 
    }; 


public boolean verifyStoragePermissions(Activity activity, int REQUEST_EXTERNAL_STORAGE) { 

    initialize(activity); 

    // Check if we have write permission 
    int permission = 
     ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    if (permission != PackageManager.PERMISSION_GRANTED) { 
     // We don't have permission so prompt the user 
     ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); 
     return false; 
    } else { 
     return true; 
    } 
    } 
4

爲我的項目,我做的Utils類用這種方法:

public static boolean checkAllAndRequestPermisions(Activity activity, int requestCode, LinkedList<String> permissionsList) { 
     LinkedList<String> needPermissions = new LinkedList<>(); 
     for(String permission : permissionsList){ 
      if (ContextCompat.checkSelfPermission(activity, permission) != activity.getPackageManager().PERMISSION_GRANTED){ 
       needPermissions.add(permission); 
      } 
     } 
     if (!needPermissions.isEmpty()){ 
       ActivityCompat.requestPermissions(activity, needPermissions.toArray(new String[needPermissions.size()]), requestCode); 
     } 
      return true; 
    } 

並實行onRequestPermissinsResult這樣的接口:

@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case Consts.SOME_PERMISSIONS_REQUEST_CODE: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       } else { 
        Toast.makeText(getApplicationContext(), "Need permissions", Toast.LENGTH_LONG).show(); 
       } 
       return; 
      } 
      // other 'case' lines to check for other 
      // permissions this app might request 
     } 
    } 

它不是完美的解決方案,但第一次可以,我希望它的幫助。

另外不要忘記,你可以在gradle targetSdkVersion中設置少於23的時間來實現所有請求的權限功能。