Har*_*han 5 android android-permissions
我正在测试我的应用程序在(Coolpad(Lolipop MRI)、Samsung Galaxy grand neo(Kitkat)、Redmi(Marshmallow)、Lenovo z2 plus(Marshmallow))等设备上的动作叠加,以在来电屏幕上显示对话。事情似乎适用于 lenovo z2 plus() 以外的设备。
正式直接请求许可我得到了例外:
public void testPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
}
Run Code Online (Sandbox Code Playgroud)
android.content.ActivityNotFoundException: 没有找到处理 Intent { act=android.settings.action.MANAGE_OVERLAY_PERMISSION 的活动
现在我将请求许可更改为:
public void testPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它仍然无法在 zuk 2 中请求许可。感谢立即提供帮助。
该ACTIVITY_MANAGE_OVERLAY_PERMISSION在加入API等级23。在发送意图之前,您需要检查匹配的活动是否可用。文档中明确指出,
文档:在某些情况下,匹配的 Activity 可能不存在,因此请确保您对此加以防范。
在 manifest.xml 中为 SYSTEM_ALERT_WINDOW 定义权限,
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Run Code Online (Sandbox Code Playgroud)
意图
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 2323;
public void checkPermission() {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
Run Code Online (Sandbox Code Playgroud)
而Result方法,Intent不会向该onActivityResult方法返回任何数据。最好在onActivityResult方法中再次检查覆盖权限
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (Settings.canDrawOverlays(this)) {
// You have permission
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果应用面向 API 级别 23 或更高级别,应用用户必须通过权限管理屏幕向应用明确授予此权限。该应用程序通过发送带有操作 Settings.ACTION_MANAGE_OVERLAY_PERMISSION 的意图来请求用户的批准。应用程序可以通过调用 Settings.canDrawOverlays() 来检查它是否具有此授权。
Ult*_*vil -2
尝试这个
它对我有用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent localIntent = new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION");
localIntent.setData(Uri.parse("package:" + getPackageName()));
localIntent.setFlags(268435456);
startActivity(localIntent);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9842 次 |
| 最近记录: |