科多瓦 - 安卓应用因联系人权限而在启动时崩溃

3

我遇到了一个问题,找到了原因,但无法解决。

我的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-permissionuses-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。
此外,如果我从应用程序设置中手动授权联系人访问权限,并强制停止并重新启动应用程序,则可以正常工作。这让我感到非常疯狂。
非常感谢任何阅读或回答的人。

在权限被授予之前,您不应该执行任何需要这些权限的操作(可能是在调用“success”函数时授予权限;我对该库不熟悉)。 - Michael
是的,兄弟,但问题是在应用程序启动之前我实际上无法做任何事情。就像我没有控制台日志或其他任何东西可选一样。除了logcat,我根本无法访问任何日志,因为在我能够在开发者工具的设备类别中看到应用程序之前,应用程序就已经崩溃了。在设备准备好事件处理程序中添加的所有内容都不会被执行,因为应用程序在此之前就已经崩溃了。 - Pierrick Martellière
我从未说过这样的话,但感谢您的有用评论。 - Pierrick Martellière
1个回答

0

你是怎么解决在链接中提到的人行横道问题的? - RamblinRose
更新我的项目的Cordova非常棘手,很多东西都失败了,有没有人知道如何在不更新Cordova的情况下解决这个问题?有人知道这个修复在那个Cordova版本中有什么变化吗? - Matias

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