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的代码。

希望它有帮助!

相关问题