管理悬浮窗权限 - 活动未找到异常

6
我收到了以下异常信息:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.action.MANAGE_OVERLAY_PERMISSION dat=package:com.my.app }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1816)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525)
at android.app.Activity.startActivityForResult(Activity.java:4265)

这是在一款已经推出几年且运行稳定的应用程序中发生的。现在我在一个Android 7设备上遇到了这个异常,型号为ZUK Z1。有任何想法吗?看起来像是rom的问题。这个rom提供了获取叠加绘图权限的另一种方式吗?

编辑 - 这是我用来获取权限的函数

public static void checkOverlayPermission(Activity activity)
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(activity))
    {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + activity.getPackageName()));
        activity.startActivityForResult(intent, BaseDef.OVERLAY_PERMISSION_REQ_CODE);
    }
}

你运行的应用程序是哪个版本?请记住,在Android 6.0 Marshmallow之后,您的应用程序需要在运行时请求某些权限。您不能再在清单中请求权限。 - kggoh
从Android 5到7,如果我不启动一个活动(就像在Android 6之前),我将不会收到异常。我添加了上面的代码来向您展示我的操作。 - prom85
嘿 @prom85,你找到这个问题的解决方案了吗? - UltimateDevil
@UltimateDevil 我想我们永远也不会知道了。 - Denny
嗨大家好,我在Android电视上遇到了相同的问题。有没有办法让它在电视上工作? - SKG
显示剩余2条评论
2个回答

1

试试这个。它对我有用。可能会帮到你。

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);
            }

如果ROM是问题,可以尝试这个方法

通常你不能只检查所有存在设置问题的ROM。上述代码在Android N中也能正常运行,我已经测试过。

你可以将你的代码放在try catch块中,当进入catch块时向用户显示一个对话框,要求他手动授予悬浮窗口权限而不是直接带他到设置页面。

有些ROM,即一些自定义的ROM,可能会与某些系统设置存在问题,因此这是可以用来解决这些情况的最佳方法。


2
不确定为什么你加了 localIntent.setFlags(268435456); 我把它省略了,一切都很好。 - CrandellWS
1
这正是在Settings.ACTION_MANAGE_OVERLAY_PERMISSION中的内容。踩个反对。手动输入Action Intent是不好的做法。 - ralphgabb

0

对我有效的方法:

            var intent = new Intent(Android.Provider.Settings.ActionManageOverlayPermission);
            intent.SetData(Android.Net.Uri.FromParts("package", PackageName, null));
            StartActivity(intent);

这是在 Xamarin 中哦!


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