我遇到了一个问题,找到了原因,但无法解决。
我的cordova应用在Android 8.0.0上崩溃。 我进行了日志记录,发现该应用程序正在尝试访问联系人。
奇怪的是,我没有关于联系人的插件,也没有在我的应用程序中使用联系人功能。
在日志记录中,我有以下错误:
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 from ProcessRecord{6155964 5609:com.pierrickmartelliere.UPHAIRR/u0a210} (pid=5609, uid=10210) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
我尝试了所有方法,将以下内容添加到我的config.xml
中:
<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>
在构建时,它能够很好地添加到AndroidManifest.xml,但我仍然收到错误消息。
按照此处所述,我尝试了uses-permission
和uses-permission-sdk
标签,但都没有成功。
我的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”事件触发之前应用程序崩溃,因此我无法在运行时进行任何操作。
如此处所述,如果将targetSdkVersion更改为低于23(甚至25),则崩溃将消失,但是我无法将其上传到谷歌播放器,因为play控制台不接受targetSdkVersion < 26。
此外,如果我从应用程序设置中手动授权联系人访问权限,并强制停止并重新启动应用程序,则可以正常工作。这让我感到非常疯狂。
非常感谢任何阅读或回答的人。