Cordova 为什么在android 8上尝试保存联系人时,ionic native/contacts插件会使应用程序崩溃?

Cordova 为什么在android 8上尝试保存联系人时,ionic native/contacts插件会使应用程序崩溃?,cordova,ionic-framework,ionic3,cordova-plugins,ionic-native,Cordova,Ionic Framework,Ionic3,Cordova Plugins,Ionic Native,我尝试使用ionic native/contacts插件保存联系人,它适用于除android 8之外的所有android版本,应用程序停止并关闭。 这是我的代码,与ionic framework示例相同: SaveToContact(phone, name) { try { let contact: Contact = this.contacts.create(); contact.name = new ContactName(null, name, ''); contact.

我尝试使用ionic native/contacts插件保存联系人,它适用于除android 8之外的所有android版本,应用程序停止并关闭。 这是我的代码,与ionic framework示例相同:

SaveToContact(phone, name) {
try {
  
  let contact: Contact = this.contacts.create();
  contact.name = new ContactName(null, name, '');
  contact.phoneNumbers = [new ContactField('mobile', phone)];
  this.global.presentToast('Will Save!'),
    contact.save().then(
      () => this.global.presentToast('Contact saved!'),
      (error: any) => this.global.presentToast('Error saving contact: No Permission')
    );
} catch (e) {
  this.global.presentToast(e);
}
我使用android-26构建了apk,这些是ionic native/contacts插件的版本

@角度/核心:5.0.3

离子角:3.9.2

cordova插件联系人:^3.0.1

@爱奥尼亚本地/联系人:^4.7.0


我还将plugin对象放在app模块的provider数组中,但应用程序仍然会崩溃。

看看官方cordova plugin github上的发行说明

该公司表示,截至2017年12月15日,他们已正式弃用该插件,并且在此之前没有宣布他们已使该插件与安卓8.0兼容,因此我们可以放心地认为,他们在使其与安卓8.0兼容之前已停止开发该插件


将targetSdkVersion更改为23

由于Android在8.0中处理权限的方式发生变化,此插件已损坏

基本上:过去请求联系人写入权限也会给您联系人读取权限,但现在如果您想同时请求这两个权限,您必须同时请求,但它只会请求用户一次。“保存”功能导致应用程序崩溃的原因是,它正在写入联系人,然后在只有“写入”权限时尝试将其读回

我已经建立了存储库,并更新了ContactManager.java文件,以便与Android 8.0一起使用:

您只需覆盖plugins/cordova plugin contacts/src/android目录中的ContactManager.java文件,然后通过删除并重新添加android平台,强制ionic重新编译插件:

>ionic platform rm android

>ionic platform add android

您是否在浏览器中调试了远程设备?请不要发布代码图片,而只发布实际代码。为什么,这很容易理解。在此处输入图像说明否:代码的图像没有帮助确定,这就是我如何使其工作的,图片更容易查看文件的修改位置。