当前位置: 首页 > 知识库问答 >
问题:

如何使用接口ActivityCompat.PermissionCompatDelegate

楮阳
2023-03-14

我已经尝试在我的android应用程序中创建一个用于在运行时请求权限的自定义类。但是系统要求我们只能从活动中请求,所以没有起作用。但是,随着最近发布的支持库版本,即com.android.support:support-compat:27.0.0,在ActivityCompat类中提供了一个新的接口PermissionCompatDelegate,它具有两个方法声明:布尔requestPermissions(Activity Activity,String[]permissions,int requestCode)和布尔onActivityResult(Activity Activity,int requestCode,int resultCode,Intent data)。我需要知道如何和在哪里使用这些方法。我打算将这些方法用于请求运行时权限的自定义类。

编辑-我读过关于在android中请求运行时权限的文档,并在一个活动中使用了上述方法。我不需要知道什么已经存在于可用的文档中。我需要知道是否有任何方法可以为我的目的使用这些方法,即创建一个自定义类来请求运行时权限。

共有1个答案

扶珂
2023-03-14

您不需要为权限创建seprate类,您可以在活动中获得运行时权限,如下所示:

private void getRuntimePermissions() {
    final String[] NECESSARY_PERMISSIONS = new String[] {
            Manifest.permission.CAMERA,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,

    };

    if ((ContextCompat.checkSelfPermission(getApplicationContext(),
            Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
            && (ContextCompat.checkSelfPermission(getApplicationContext(),
                    Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)) {

        //Permission already granted

    } else {

       //ask for permission

            ActivityCompat.requestPermissions(getApplicationContext(),
                    NECESSARY_PERMISSIONS, 123);
    }

}

==>>处理(按要求管理或执行任务)用户允许或拒绝权限

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
    case 123:
        if (grantResults.length > 0) {

            if ((grantResults[0] == PackageManager.PERMISSION_GRANTED)
                    && (grantResults[1] == PackageManager.PERMISSION_GRANTED)) {
                //Permission granted
            } else {

                if ((grantResults[0] == PackageManager.PERMISSION_DENIED && !ActivityCompat
                        .shouldShowRequestPermissionRationale(
                                getApplicationContext(),
                                Manifest.permission.CAMERA))
                        || (grantResults[1] == PackageManager.PERMISSION_DENIED && !ActivityCompat
                                .shouldShowRequestPermissionRationale(
                                        getApplicationContext(),
                                        Manifest.permission.WRITE_EXTERNAL_STORAGE))) {

                    //Permission deny with never ask again

                } else {
                    //Permission deny
                }
            }
        }

    }
}
 类似资料:
  • 问题内容: 我有一个 保持地图根据浮动量排序的最佳方法是什么? 是最好的答案??如何使用? 我只创建一次地图,并替换了经常使用的和。 问题答案: 我会用,它实现。正是为此目的而设计的。 例: 有关SortedMap的信息,请参见Java教程页面。 和这里的教程列表相关TreeMap的。

  • 本文向大家介绍python如何使用unittest测试接口,包括了python如何使用unittest测试接口的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python使用unittest 测试接口的具体代码,供大家参考,具体内容如下 1.首先使用 python 的requests 对接口进行测试 2.使用unittest调用接口,且对接口测试的结果进行统计 3.使用suite对c

  • 我不知道如何正确使用比较器接口。 注意:我不想使用我在大多数代码中看到的“一行”比较器实现,这意味着: 再说一遍,我不想使用这个,因为我将对许多不同的ArrayList进行排序,每次这样做似乎都是浪费空间。我想以某种方式让它工作,让我的compareTo方法在一个地方编写一次。 我尝试了许多不同的方法,但我对实现接口还不熟悉,所以我可能遗漏了一些东西。 这是我的Card类和它的比较方法。(注意:让

  • Elasticsearch 本身不提供对索引的 rename,mapping 的 alter 等操作。所以,如果有需要对全索引数据进行导出,或者修改某个已有字段的 mapping 设置等情况下,我们只能通过 scroll API 导出全部数据,然后重新做一次索引写入。这个过程,叫做 reindex。 之前完成这个过程只能自己写程序或者用 logstash。5.0 中,Elasticsearch 将

  • ChatGPT的接口如何调用?

  • 我对类上的接口实现的理解是,接口类型引用实现接口的类的对象。 但是当我研究下面的代码片段在上面的代码中使用时… GetConnection(host,username,password)返回对对象的引用(类型为Connection),但DriverManager类中没有实现接口。谁能澄清我的这个疑问..?还是我漏掉了什么? 下面的代码段不能得到相同的东西 createStatement()应该返回