找不到可处理的活动来处理意图 {act = android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS}。

5
我正在使用以下简单代码来在DND期间请求更改铃声的权限。应用程序正在Android 6.0上进行测试。但是它会崩溃,并显示以下日志:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS }

这是我的代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!notificationManager.isNotificationPolicyAccessGranted()) {
        startActivity(new Intent(ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS));
    }
}
时,我会调用

这个函数。


5
在JavaDocs中虽然没有提到这个特定操作,但你应该假设此活动在任何设备上都是可选的(或者至少,该 Intent 操作可能不被某些设备支持)。 - CommonsWare
1
@CommonsWare,我认为你是正确的。我应该尝试着处理崩溃。 - Panache
找不到这个问题的任何解决方案吗? - Ahmad Joyia
3个回答

0

尝试这段代码片段,它对我有效 android code

是的,别忘了在清单中添加权限...

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

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/> - anonymous
1
请避免发布代码图片。您可以直接将代码复制/粘贴到这里... - Leonardo Alves Machado

0

只需要用try和catch包围起来。 对我有用。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                    && !notificationManager.isNotificationPolicyAccessGranted()) {
    try {
        Intent intent = new Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
                            startActivity(intent);
                        }catch (Exception et){
                            //tell user something went wrong
                        }
    }

0
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
    if (!notificationManager.isNotificationPolicyAccessGranted()) {
        startActivity(new Intent(ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS));
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接