gpt4 book ai didi

安卓棉花糖 : How to allow Runtime Permissions programatically?

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:05 30 4
gpt4 key购买 nike

我正在开发一个需要一些系统权限的应用程序,但是在 Android Marshmallow 上安装时不再自动授予这些权限。

我想在运行时请求这些权限并运行某种自动化来授予它们,而无需用户在系统权限对话框出现时点击“允许”按钮。

我怎样才能做到这一点?在 Marshmallow 和更高版本中有什么办法可以做到这一点吗?

最佳答案

对于 Marshmallow 或更高版本的权限不会在安装时授予,必须在运行时需要时请求(如果之前未授予。)

为此,您需要运行 ActivityCompat.requestPermissions() 在您的 Activity 中弹出系统权限对话框,此时用户正在执行需要额外系统权限的操作。

WRITE_EXTERNAL_STORAGE 权限的示例如下:

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

注意:WRITE_EXTERNAL_STORAGE_REQUEST_CODE 是您应该在别处定义的任意整数常量。

您请求的权限也应该在您的 AndroidManifest.xml 中声明。在此示例中,声明为:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

为了处理系统权限对话框响应,您还需要在 Activity 中实现 onRequestPermissionsResult()。对于这个例子,代码类似于

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
if (grantResults.length == 0 || grantResults[0] == PackageManager.PERMISSION_DENIED) {
return; //permission not granted, could also optionally log an error
}
if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
//Do whatever you needed the write permissions for
}
}

如果您通过 Espresso 自动化您的应用程序, UIAutomator和/或其他一些 UI 测试框架,您需要在测试期间预期并单击系统对话框,这可以通过以下测试代码完成:

private void allowPermissionsIfNeeded()  {
if (Build.VERSION.SDK_INT >= 23) {
UiObject allowPermissions = mDevice.findObject(new UiSelector().text("Allow"));
if (allowPermissions.exists()) {
try {
allowPermissions.click();
} catch (UiObjectNotFoundException e) {
Timber.e(e, "There is no permissions dialog to interact with ");
}
}
}
}

提供了有关测试系统 UI 权限的更全面说明 here .

关于安卓棉花糖 : How to allow Runtime Permissions programatically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41294274/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com