当前位置: 首页 > 面试题库 >

Android运行时权限-如何实现

施超
2023-03-14
问题内容

Android开发人员文档提供了以下在运行时请求权限的示例:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

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

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

在此示例中,什么是“
MY_PERMISSIONS_REQUEST_READ_CONTACTS”?它说这是一个应用程序定义的int常量,但这是否意味着我应该制作一个Constants.java并声明一个公共静态int?该值是多少?

在其他示例中,我看到人们在这里使用1,或者0或0xFFEEDDCC,但是我找不到它的解释。有人可以向我解释这里需要什么,为什么?(就我而言,我需要确保该应用有权访问精细位置)

ActivityCompat文档说:“特定于应用程序的请求代码与报告给onRequestPermissionsResult的结果相匹配”?这对我没有帮助。


问题答案:

在此示例中,“ MY_PERMISSIONS_REQUEST_READ_CONTACTS”是什么?

是一个int将特定的requestPermissions()调用与相应的onRequestPermissionsResult()回调相关联的。

在幕后,requestPermissions()使用startActivityForResult();这int成为它在同一个角色startActivityForResult()

这是否意味着我应该创建一个Constants.java并声明一个公共static int?

我只想private static final int参加活动。但是,您可以在任何地方声明它。

该值是多少?

我似乎记得它必须低于0x8000000,但否则可以是您想要的任何值。您requestPermissions()在活动中的每个调用中使用的值应具有不同的int,但实际数字并不重要。

如果您的活动只有一个requestPermissions()电话,那么该int值实际上并不重要。但是许多应用程序requestPermissions()在一个活动中将有多个呼叫。在这种情况下,开发人员可能需要在中知道onRequestPermissionsResult()这是针对什么请求的结果。



 类似资料:
  • Android开发人员文档给出了运行时请求权限的示例: 此示例中的“MY_PERMISSIONS_REQUEST_READ_CONTACTS”是什么?它说它是一个应用程序定义的int常量,但这是否意味着我应该做一个常量.java并声明一个公共静态int?值应该是多少? 在其他例子中,我看到人们在这里使用1,或0或0xFFEEDDCC,但我找不到它是什么的解释。谁能给我解释一下这里需要什么,为什么?

  • 我添加了使用权限,包括WRITE_EXTERNAL_STORAGE,android.permission.相机,READ_EXTERNAL_STORAGEAndroidManifest.xml. 当我在Nexus6(API 24)中运行我的应用程序时,它向我抛出了以下错误: java.io.IOException:权限被拒绝 这是我的代码: 如何在权限相机运行时打开之前使用它?

  • 假设我试图将位图图像保存为png 如果我使用Android 6.0及以上版本,我需要请求运行时权限 我有几个问题: 上面的代码成功地请求了权限,但是我不得不重新启动应用程序,我如何恰当地暂停代码直到权限被授予或未被授予? 在 Android 6.0 下方,权限由清单文件在安装时授予。Android 5 或更低版本如何处理运行时权限代码? 谢谢

  • 我是android的新手,不知道我做错了什么,这个类得到了经度和纬度并发送到另一个类,代码抛出了一个错误请告诉我该怎么做怎么做: public void onRequestPermissionsResult出错(int requestCode,String[]permissions,int[]grantResults

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

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