【发布时间】:2019-05-12 17:00:41
【问题描述】:
我遇到了一个问题,我找到了原因,但我无法解决。
我的 cordova 应用在 android 8.0.0 上崩溃。我做了一个 logcat,它显示该应用程序正在尝试访问联系人。
奇怪的是我没有联系人插件,也没有在我的应用程序中使用联系人。
在logcat上,我有这个错误:
12-11 17:29:42.094 E/AndroidRuntime(5609): java.lang.RuntimeException: java.lang.RuntimeException: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2从 ProcessRecord{6155964 5609:com.pierrickmartelliere.UPHAIRR/u0a210} (pid=5609, uid=10210) 需要 android.permission.READ_CONTACTS 或 android.permission.WRITE_CONTACTS
我尝试了所有方法,添加了
<config-file parent="/manifest" target="AndroidManifest.xml">
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
</config-file>
到我的config.xml,它在构建时很好地添加到了 AndroidManifest.xml 但我仍然收到错误。
我尝试了uses-permission 和uses-permission-sdk 两个标签,如here 所述,但没有运气。
我的cordova-android版本是6.2.3
我还尝试了 cordova-plugin-permission,就像在 deviceready 监听器中一样:
var permissions = cordova.plugins.permissions;
permissions.requestPermission(
permissions.READ_CONTACTS,
function(success) {},
function(error) {}
);
permissions.requestPermission(
permissions.WRITE_CONTACTS,
function(success) {},
function(error) {}
);
但没有任何改变。应用程序在“deviceready”事件触发之前崩溃了,所以我在运行时什么也做不了。
如here 所述,如果我将 targetSdkVersion 更改为低于 23(甚至 25),崩溃就会消失,但我无法再将其上传到 google play,因为游戏控制台不接受 targetSdkVersion
此外,如果我从应用设置手动授权联系人访问权限并强制停止并重新启动该应用,它就可以工作。这让我发疯了。
我们将不胜感激。
感谢任何愿意花时间阅读或回答的人。
【问题讨论】:
-
在实际授予权限之前,您不应该做任何需要这些权限的事情(大概是在调用
success函数时;我不熟悉那个库)。 -
是的,兄弟,但问题是在应用程序启动之前我实际上无法做任何事情。就像我没有选择控制台日志或任何东西一样。我根本无法访问除 logcat 之外的任何日志,因为该应用程序在我能够在开发人员工具的设备类别中看到该应用程序之前就崩溃了。在设备就绪事件cathcer中添加的所有内容都没有执行,因为应用程序之前崩溃了。
-
我从来没有说过这样的话,但是感谢您的有用评论。
标签: android cordova android-permissions cordova-android