我尝试使用ionic-native/contacts plugin
保存联系人,它适用于除android 8之外的所有android版本,该应用已停止并关闭。
这是我的代码,与离子框架示例相同:
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 plugin
的版本
“ @ angular / core”:“ 5.0.3”
“离子角”:“ 3.9.2”
“ cordova-plugin-contacts”:“ ^ 3.0.1”
“ @ ionic-native / contacts”:“ ^ 4.7.0”
我也将插件对象放在应用程序模块的provider数组中,但仍然使应用程序崩溃。
答案 0 :(得分:2)
此插件已损坏,原因是Android处理8.0(https://developer.android.com/about/versions/oreo/android-8.0-changes#o-pri)中的权限的方式发生了变化。
基本上:过去,请求联系人写权限还会为您提供联系人读权限,但是现在您要同时执行两个操作,就必须同时请求两个(但只会询问用户一次)。保存功能使应用程序崩溃的原因是,它正在编写联系人,然后在只有写权限的情况下尝试将其读回。
我已经分叉了存储库,并更新了ContactManager.java文件以使其可用于Android 8.0:https://github.com/duncan-c/cordova-plugin-contacts/blob/master/src/android/ContactManager.java
您可以简单地覆盖 plugins / cordova-plugin-contacts / src / android 目录中的ContactManager.java文件,然后通过删除然后重新添加android来强制ionic重新编译插件。平台:
>ionic platform rm android
>ionic platform add android
答案 1 :(得分:1)
看看官方的cordova-plugin github上的发行说明。 Reference
它表示他们已自2017年12月15日起正式弃用该插件,并且他们并未宣布在此之前使该插件与android 8.0兼容,因此我们可以放心地假设他们在使其成为android 8.0之前已停止使用该插件。兼容。
答案 2 :(得分:1)
将targetSdkVersion更改为23