java.lang.SecurityException:权限拒绝:启动 Intent - 打开设置屏幕

java.lang.SecurityException: Permission Denial: starting Intent - open settings screen

提问人:Bob Redity 提问时间:10/19/2022 更新时间:10/19/2022 访问量:394

问:

我想从我的应用程序中打开设置屏幕。

我已经制作了应用程序exported = trueManifest

除此之外,我确保在运行时选择正确的配置app

从这篇文章 -> Android - java.lang.SecurityException:权限拒绝:启动意图

但仍然有这个错误

    java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.android.settings/.SubSettings } from ProcessRecord{a973751 21451:com.myapp.android.main/u0a157} (pid=21451, uid=10157) not exported from uid 1000

我启动活动的代码是

 val intentTwo = Intent()
        intentTwo.setClassName("com.android.settings",
            "com.android.settings.SubSettings")
        startActivity(intentTwo)

我也试过这个

val intentOne = Intent()
        intentOne.setComponent(ComponentName("com.android.settings",
            "com.android.settings.SubSettings"))
        startActivity(intentOne)

对此有什么想法吗?

人造人

评论

1赞 Dan Baruch 10/19/2022
我认为这里的错误是 subSettings 没有导出给您,而且我认为无法打开该屏幕,因为“subSettings”可以指代许多不同的东西。您是尝试打开设置应用的特定页面,还是尝试打开一般的设置应用?
0赞 Bob Redity 10/19/2022
@DanBaruch是的。你是对的。我可以从设置应用程序打开特定屏幕。要打开设置,我可以尝试,但这不是我想要的。我正在尝试打开特定的屏幕,该屏幕< - 这是活动的名称Settings.ACTION_SOMETHING_HERESubSettings
0赞 Dan Baruch 10/19/2022
可以使用 adb 等打开特定的设置页面。你能告诉我你想打开什么屏幕吗?如果我手动导航到它,我必须打开什么?
0赞 Bob Redity 10/19/2022
@DanBaruch当然。它的屏幕从选项TalkBackAccessibility

答:

0赞 CommonsWare 10/19/2022 #1

SubSettings不会从“设置”应用中导出,至少对于 AOSP 和 Android 13 是这样。对于以这种方式配置的任何设备,您都无法启动此活动。

另外,请记住,设备制造商经常修改系统设置应用程序。因此,甚至不需要任何设备拥有 ,更不用说可以由外部应用程序启动了。SubSettings

而且,请注意,这似乎没有多大作用SubSettings

评论

0赞 Dan Baruch 10/19/2022
从我通过浏览大量屏幕所看到的情况来看,SubSettings 似乎是一个存根,您可以导航到多个内部设置页面,但如果您在 adb 中查找它的“路径”或其他东西,您最终会在最后获得 subSetting,所以我认为没有必要专门打开“subSettings”, 因为我认为这只是 android 隐藏活动或防止“路径”太长的一种存根方式
0赞 Bob Redity 10/19/2022
@DanBaruch你们。我同意。也许只是我们无法访问的其他内部设置屏幕之上的一层SubSettings
0赞 Bob Redity 10/19/2022
那么@DanBaruch有没有办法获得真正的活动名称呢?我尝试过 adb 命令,但除了实际命令之外,它从未显示任何内容SubSettings
0赞 Dan Baruch 10/20/2022
@BobRedity不幸的是,我还没有找到 100% 解决它的方法。我确实发现,如果您找到设置 apk 的 Manifest.xml 源,您可以找到许多设置名称,并且其中很多可以通过 adb 命令直接打开。不过,如果我没记错的话,我认为 TalkBack 不是其中之一