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

我如何在Android运行时请求许可?

岳亮
2023-03-14

我正在开发一个Android应用程序,我必须允许用户使用相机扫描QR码。

在每个Android版本中(除外

我阅读了开发android网站的文档,但我不理解一些事情:

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        } else {    
        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    }
}

守则第二部分:

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

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

如何使此代码适应我的问题?

什么是“MY_PERMISSIONS_REQUEST_READ_CONTACTS”?

共有3个答案

严言
2023-03-14

试试这个简单的代码,在运行时询问用户权限。

步骤1:声明此变量

private int STORAGE_PERMISSION_CODE=23

步骤2:将此代码粘贴到onCreate()函数中,一旦调用活动,就会生成一个对话框,要求您授予“读取外部存储”的访问权限。

ActivityCompat.requestPermissions(this,new String[{Manifest.permission.READ_EXTERNAL_STORAGE},STORAGE_PERMISSION_CODE]);

您可以根据需要更改“READ_EXTERNAL_STORAGE”参数。

有关“Android Marshmallow权限”的完整演示,请查看此链接:https://www.simplifiedcoding.net/android-marshmallow-permissions-example/

宁鹏程
2023-03-14

RxPersion是现在广泛使用的库。如果编写所有代码以获取权限,它会变得很复杂。

RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance // Must be done during an initialization phase like onCreate
rxPermissions
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

你的build.gradle

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

这不是很容易吗?

云宾鸿
2023-03-14

MY_PERMISSIONS_REQUEST_READ_CONTACTS是一个静态int变量,您需要在活动中设置它。它是onRequest estPermissionsResult中使用的请求代码。它是必需的,以便您知道在onRequest estPermissionsResult中对哪个权限采取了行动(是接受还是拒绝)。

在你的活动的顶部只需把私有静态最终intMY_PERMISSIONS_REQUEST_READ_CONTACTS=1;(数字可以是任何你想要的)

 类似资料:
  • 问题内容: 在清单文件中,我添加了粗略的权限,当我在装有Android 6的设备上运行时,什么也没发生!我尝试了所有方法,但无法获取位置更新… 我究竟做错了什么? 问题答案: 实际上需要在运行时请求“位置”权限(请注意代码中的说明)。 这是经过测试的有效代码,用于请求“位置”权限。 确保导入: 然后将此代码放在Activity中: 然后在中调用方法: 然后,您可以使用和完全按照问题中的说明进行操作

  • 首先,我知道这是一个重复的问题,但我已经看过了其他类似问题的答案,没有找到成功的解决方案。 我已经开发了一款应用程序,可以在我的测试设备上完美运行,这是一款运行Android L(5.0.1)的三星S4。不过,我希望这款应用程序也能在较新版本的Android上运行。 我知道Android M的请求权限已更改,因此必须在运行时请求权限,但当我尝试实现此功能时,对话框从未出现,因此从未请求所需的权限。

  • 问题内容: 我正在测试我的应用,即使清单中已经定义了,它也会被强制关闭。我在某处已经读到,如果我在运行时请求权限,则不会强制关闭您的应用程序。我也已经阅读了这个android文档,用于请求运行时权限。 因此,我知道我们可以请求一个如下所示的权限,该权限在android文档中有所提及。 上面的代码具有获取结果的回调方法。 我的问题是要向用户确切请求权限?我们应该在应用启动时使用请求权限还是应该在需要

  • 我做错了什么?

  • 我需要从tarantool中选择所有数据,从一个空间中选择两个值。如何像mysql一样执行对tarantool的请求? 现在我可以提出两个要求: 但我不知道如何将结果合并成一个;(

  • 我已在清单文件中添加了所有权限。在Lollipop中,所有应用程序都会在安装应用程序期间询问权限,但当应用程序安装在Marshmallow中时,权限不是询问。 清单权限是