【发布时间】:2018-01-20 14:17:22
【问题描述】:
以下问题与 Android 6 及以上版本有关。
我已经编写了一些代码,可以在 motoG、Nexus、Pixel 等每台设备上运行,但代码在三星设备中会引发 SecurityException。
异常消息是
UiAutomatorTestRunner: java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@a70d2 (pid=25949) 获取内容提供程序设置时
我在三星 Galaxy S5 上做了一次尝试,它成功了。 但是对于三星 J7,这个异常也会在代码的其他地方抛出。 我不认为在这里添加 try catch 块是正确的方法。
抛出异常的代码是:
意图意图 = AndroidServicesUtil.getPackageManager().getLaunchIntentForPackage(packageName);
异常堆栈是: >
java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@123375c (pid=6375) when getting content provider settings
at android.os.Parcel.readException(Parcel.java:1621)
at android.os.Parcel.readException(Parcel.java:1574)
at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:4292)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:6570)
at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:2388)
at android.content.ContentResolver.acquireProvider(ContentResolver.java:1505)
at android.provider.Settings$NameValueCache.lazyGetProvider(Settings.java:1431)
at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:1505)
at android.provider.Settings$Secure.getStringForUser(Settings.java:8662)
at android.provider.Settings$Secure.getIntForUser(Settings.java:8732)
at android.provider.Settings$Secure.getInt(Settings.java:8722)
at android.app.ApplicationPackageManager.getHiddenList(ApplicationPackageManager.java:814)
at android.app.ApplicationPackageManager.isHidden(ApplicationPackageManager.java:859)
at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:925)
at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:907)
at android.app.ApplicationPackageManager.getLaunchIntentForPackage(ApplicationPackageManager.java:302)
at com.myclass.launchApp(SessionManager.java:595)
任何人都可以帮助我理解为什么仅在适用于 Android 版本 >= 6 的三星设备中引发 SecurityException。
谢谢。
【问题讨论】:
-
请编辑您的问题并提供minimal reproducible example。这将包括整个 Java 堆栈跟踪(不仅仅是错误消息)和触发崩溃的 Java 代码。
-
我了解您的查询,但我的问题与我的代码无关,而是一个一般性问题。 (因为在不同设备的代码的不同位置引发了异常)为什么 SecurityException 仅在三星设备中引发,而在 Android vs >=6 的任何其他设备中均不引发?我们需要为三星设备做些什么吗?
-
“为什么 SecurityException 只在三星设备中抛出,而不是在任何其他 Android 设备中引发 >=6?” -- 首先,您尚未测试所有可能的 Android 6.0+ 设备,因此您不一定知道此代码失败的设备的确切列表。至于失败的原因,我们无法回答,因为您没有按照我的原始评论中的要求提供minimal reproducible example。欢迎设备制造商和定制ROM开发者更改Android;问题是错误是在您的代码中还是在他们的更改中。
-
更新了堆栈跟踪和我得到安全异常的代码。
-
您传递的
packageName的值可能无效,但我希望这里出现不同的错误消息。如果此代码因已知良好的包名称而失败,则责任落在三星(以破坏getLaunchIntentForPackage()的方式更改 Android)和可能的谷歌(如果设备已发货,则没有涵盖此场景的 CTS 测试用例)有这个错误)。
标签: java android samsung-mobile samsung-mobile-sdk