2016-05-18 34 views
3

すべての許可を取得します。私はpackageinfo.requestedPermissionsによってすべての要求された許可を得ることができることを知っていますが、私は許可されたアクセス許可のリストを知りたいと許可されているアクセス権は、アンドロイドM.の場合には、付与された権限?許可されたすべてのアクセス許可を取得する方法

私は要求された許可のリストから知っています天気が許可されているかどうかを確認できますが、許可されているすべての許可のリストを知りたいと思います。要求されたすべてのアクセス許可をチェックしたくありません。

+0

'requestedPermissions'に反復するループを記述し、対応する' requestedPermissionsFlags'要素に 'REQUESTED_PERMISSION_GRANTED'が含まれているかどうかを調べることで、問題は何もわかりません。それが旗のためのものです。複数回実行する必要がある場合は、その関数を作成します。 – Michael

+0

ありがとうございます、問題はありません、私はすべての許可された権限のリストを取得する方法がありましたが、今はあなたが提案したことをするではないと思います。あなたはこれについても答えを書くことができます。それは他の答えよりも優れています。 – HariRam

答えて

11

簡単な関数は、このようになります。最近はうまくいけない問題です。

+0

は、アプリケーションに付与されているすべての権限グループを取得する方法はありますか? –

+0

@Michael:この文が実際に何をしているのか説明できますか?(pi.requestedPermissionsFlags [i]&PackageInfo.REQUESTED_PERMISSION_GRANTED)!= 0 – saravanan

+0

'requestedPermissionsFlags'は、' ' そして 'REQUESTED_PERMISSION_GRANTED'は要求された権限が現在アプリケーションに与えられているかどうかを確認するための' requestedPermissionsFlags'のエントリに対するビットマスクです。 – Michael

0

これを試しましたか?このために、あなたは

boolean permissionGranted = PermissionChecker.checkSelfPermission(MyActivity.this, 
        android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        == PackageManager.PERMISSION_GRANTED; 

も、以下のように必要なParmissionsを取得する方法があり、あなたの配列を反復処理する必要がありますちょうどPERMISSIONS配列にすべての権限を詰めるが、注意して

private static String[] PERMISSIONS = { 
     android.Manifest.permission.READ_EXTERNAL_STORAGE, 
     android.Manifest.permission.WRITE_EXTERNAL_STORAGE 
}; 

ActivityCompat.requestPermissions(
         MyActivity.this, 
         PERMISSIONS, 
         REQUEST_EXTERNAL_STORAGE 
       ); 

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

その6.0+この上いくつかのシステムダイアログの原因になりますあなたは1の許可1をチェックして、リストに追加することができます

0

を表示されます。

//我々が表示されるはずです説明?これは上記のAPIレベル16以上が必要ですが、それがすべきことを

List<String> getGrantedPermissions(final String appPackage) { 
    List<String> granted = new ArrayList<String>(); 
    try { 
     PackageInfo pi = getPackageManager().getPackageInfo(appPackage, PackageManager.GET_PERMISSIONS); 
     for (int i = 0; i < pi.requestedPermissions.length; i++) { 
      if ((pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { 
       granted.add(pi.requestedPermissions[i]); 
      } 
     } 
    } catch (Exception e) { 
    } 
    return granted; 
} 

注:特定のパッケージのために要求し、付与されているすべての権限を返し

 List<String> listPermissionsNeeded = new ArrayList<>(); 
     // No explanation needed, we can request the permission. 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.GET_ACCOUNTS) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.GET_ACCOUNTS); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION); 
     } 
     if((ContextCompat.checkSelfPermission(context, 
       Manifest.permission.READ_PHONE_STATE) 
       != PackageManager.PERMISSION_GRANTED)) 
     { 
      listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE); 
     } 
     if (!listPermissionsNeeded.isEmpty()) { 
      ActivityCompat.requestPermissions(context, 
        listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 
        MY_PERMISSIONS_REQUEST_MULTIPLE_PERMISSION); 
     } 
関連する問題