失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 安卓客户端实现将联系人保存到通讯录

安卓客户端实现将联系人保存到通讯录

时间:2022-01-28 16:01:22

相关推荐

安卓客户端实现将联系人保存到通讯录

目录

1、声明访问和修改通讯录权限

2、为h5提供将联系人保存到通讯录的方法

这里是在安卓客户端中为h5页面提供了一个将联系人保存到通讯录的方法。

1、声明访问和修改通讯录权限

在AndroidManifest.xml文件中声明如下权限:

<!-- 访问和修改手机通讯录权限 --><uses-permission android:name="android.permission.WRITE_CONTACTS" />

2、为h5提供将联系人保存到通讯录的方法

// @JavascriptInterface这个注解表示可以从一个网页中的javaScript代码调用安卓的原生方法@JavascriptInterfacepublic void saveContact(String json){// 将网页传过来的联系人手机号和姓名进行解析JSONObject jsonObject = JSON.parseObject(json);teacherMobilePhone = jsonObject.getString("mobilePhone");teacherName = jsonObject.getString("name");// 将联系人保存到通迅录之前先检查是否有修改通讯录的权限,如果有权限则直接保存通讯录;没有权限需要先申请修改通讯录的权限if(requestPermissions(PERMISSIONS_REQUEST_WRITE_CONTACTS, Manifest.permission.WRITE_CONTACTS)){// 如果已经开启了权限,则直接将联系人保存到通讯录saveMobilePhoneAndName(teacherMobilePhone,teacherName);}}/*** 检查并申请权限* @return 是否所需权限已经申请*/public boolean requestPermissions(int req, String... permissions){if (getActivity() == null || permissions == null){return true;}fastClickUtil.start(REQUEST_PERMISSIONS_TAG);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {List<String> data = CheckPermissionUtils.getRequestPermissionList(getContext(), permissions);if (!CommonUtil.isEmpty(data)){requestPermissions(data.toArray(new String[0]), req);return false;}return true;}else{return ((BaseActivity)getActivity()).requestPermissions(req, permissions);}}/*** 检查权限是否已经申请**/public static List<String> getRequestPermissionList(Context context, String... permissions){if (context == null || permissions == null){return null;}List<String> data = new ArrayList<>();//存储未申请的权限for (String permission : permissions) {int checkSelfPermission = ContextCompat.checkSelfPermission(context, permission);if(checkSelfPermission == PackageManager.PERMISSION_DENIED){//未申请data.add(permission);}}return data;}/*** 保存手机号和姓名到通讯录* @param mobilePhone* @param name*/private void saveMobilePhoneAndName(String mobilePhone,String name){// 创建一个操作列表,它将包含所有要执行的操作,以将新的联系人信息插入到通讯录中ArrayList<ContentProviderOperation> ops = new ArrayList<>();// 为新联系人创建一个新的rawContact,这是保存联系人的第一个步骤,相当于创建了一个存放联系人信息的空间ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());/* 创建联系人姓名.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)表示使用上一步创建的rawContact.withValue(ContactsContract.Data.MIMETYPE, monDataKinds.StructuredName.CONTENT_ITEM_TYPE)这个是用来设置MIME类型,这里表示设置MIME类型为联系人的姓名,这样系统就知道该如何进行显示.withValue(monDataKinds.StructuredName.DISPLAY_NAME, name)这个用来设置联系人的姓名 */ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, monDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(monDataKinds.StructuredName.DISPLAY_NAME, name).build());/* 创建联系人的手机号与上一步设置姓名不同的一点是,多了一个设置。即.withValue(monDataKinds.Phone.TYPE, monDataKinds.Phone.TYPE_MOBILE)用来表示手机号的类型为移动手机号码 */ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, monDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(monDataKinds.Phone.NUMBER, mobilePhone).withValue(monDataKinds.Phone.TYPE, monDataKinds.Phone.TYPE_MOBILE).build());try {// 执行操作getContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);showToast("保存成功");} catch (Exception e) {e.printStackTrace();showToast("保存失败,请重新尝试");}}

如果觉得《安卓客户端实现将联系人保存到通讯录》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。