3

我提出一個應用程序,它允許自動添加的權限爲Android 6.0和Android M.我的權限包括如何在Android 6中添加多個權限並在模擬器中測試?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

我用下面的代碼添加權限的Android 6.0版本

public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if(checkAndRequestPermissions()) { 
     Log.d ("TAG", "Permissions are granted"); 
    } 
} 

private boolean checkAndRequestPermissions() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     int permissionSTORAGE = ContextCompat.checkSelfPermission(this, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     int permissionRECORDAUDIO = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO); 
     List<String> listPermissionsNeeded = new ArrayList<>(); 
     if (permissionSTORAGE != PackageManager.PERMISSION_GRANTED) { 
      listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     } 
     if (permissionRECORDAUDIO != PackageManager.PERMISSION_GRANTED) { 
      listPermissionsNeeded.add(Manifest.permission.RECORD_AUDIO); 
     } 
     if (!listPermissionsNeeded.isEmpty()) { 
      ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS); 
      return false; 
     } 
     return true; 
    } 
    else 
     return true; 
}} 

我在上面的代碼中有兩個問題。

  1. 是否可以檢查模擬器(Android M,SDK 24)中的權限?
  2. 我的實現是否正確?我沒有真正的設備,所以我無法確認上面的代碼。
+0

其確認的工作在這裏有看http://stackoverflow.com/questions/38141523/directory-creation-not-working-in-marshmallow-android/38141778#38141778 –

+0

檢查本指南 - https:// inthecheesefactory。 com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en - 不確定模擬器是否正確,但我已在真實設備上進行了測試。應該同樣工作 – Tasos

回答

2

請正確地讀出我的代碼,並根據您的需要

只修改包括在ActivityCompat.requestPermissions(...)呼籲所有4個權限和Android會自動將這些頁面在一起像你提到的。

我有一個幫助方法來檢查多個權限,看看他們中的任何一個都沒有被授予。

public static boolean hasPermissions(Context context, String... permissions) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
     for (String permission : permissions) { 
      if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

然後只是發送它的所有權限。 Android只會詢問它需要的內容。

String[] PERMISSIONS = {Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE}; 

if(!hasPermissions(this, PERMISSIONS)){ 
    ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL); 
} 
+0

什麼是'PERMISSION_ALL'? – Jame

+0

PERMISSION_ALL是請求代碼,請定義實例變量 –

+0

int PERMISSION_ALL = 123; –

1

有一個示例應用程序由谷歌提供,請參閱示例here on Github

關於如何檢查多個權限,請參見MainActivity的代碼。

希望它有幫助!

相關問題