2016-04-22 29 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

1回のショットで複数の権限を取得するのは簡単です。

以下のコードは、複数の権限を付与するのに役立ちます。

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 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実装:私はこの方法でUtilsのクラスを作った私のプロジェクトのための

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

@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以下に設定すると、すべてのリクエストの権限機能を実装する時間がかかることがあります。

関連する問題