我知道安卓6.0有了新的权限,我知道我可以用这样的方式给他们打电话

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
    PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
        new String[] { 
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        }, PERMISSION_WRITE_STORAGE);
}

今天我看到了一款谷歌应用,它需要3个权限:联系人、短信和相机.它正在制作1-3页,并同时调用所有这些页来激活.

谁能告诉我怎么才能像短信、相机、通讯录和存储一样调用4个权限同时激活?

示例(忘记了谷歌应用的名称:()

该应用程序要求我(并制作了一个1-3页的对话框)激活短信,激活联系人,然后启动摄像头.

推荐答案

只需在ActivityCompat.requestPermissions(...)个通话中包含所有4个权限,Android就会像你提到的那样自动将它们分页到一起.

我有一个助手方法来判断多个权限,看看是否有任何权限未被授予.

public static boolean hasPermissions(Context context, String... permissions) {
    if (context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

或者在Kotlin :

fun hasPermissions(context: Context, vararg permissions: String): Boolean = permissions.all {
    ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}

然后把所有权限都发送给它.Android只会要求它需要的.

// The request code used in ActivityCompat.requestPermissions()
// and returned in the Activity's onRequestPermissionsResult()
int PERMISSION_ALL = 1; 
String[] PERMISSIONS = {
  android.Manifest.permission.READ_CONTACTS, 
  android.Manifest.permission.WRITE_CONTACTS, 
  android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 
  android.Manifest.permission.READ_SMS, 
  android.Manifest.permission.CAMERA
};

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

Java相关问答推荐

如何用Java表示C++类以通过FFI使用?

Spring bootstrap @ Asmat注释与@ Routed

如何让HikariCP指标在NewRelic中正确显示?

Gmail Javi API批量处理太多请求

那么比较似乎不是词典学的,尽管doctor 这么说

如何将kotlin代码转换为java

Java WireMock定义存根在Cucumber并行执行的多线程测试中失败

JDK22执行repackage of goal org. springframework. boot:spring—boot—maven—plugin:3.2.3:repackage failed:unsupported class file major version 66—>

根据对象和值的参数将映射<;T、值&>转换为列表<;T&>

使用动态ID从json获取详细信息的Jolt规范

如何在Java记录中设置BigDecimal类型属性的精度?

为什么Spring Boot项目无法为基于MySQL的CRUD应用程序找到从JPARepository接口扩展的ProductRepository?

使用存储在字符串变量中的路径目录打开.pdf文件

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

为什么在下面的Java泛型方法中没有类型限制?

除0错误/抱歉我的句子是PT

未调用OnBackPressedCallback-Activitiy立即终止

无法使用Open WebStart Java 8运行jnlp

rest api服务 spring 启动中出现IllegalFormatConversionException

java.lang.NoSuchMethodError:';org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream$Builder org.apache.poi-poi-ooxml-5.2.4