Android写入联系人

来源:互联网 发布:网络技术学校 编辑:程序博客网 时间:2024/06/07 00:23

获取写入的权限

在AndroidManifest.xml中添加下面这句请求权限

在activity页面直接利用try,catch写入联系人

     try {            insertConstacts();        } catch (Exception e) {            getWrieteConstactsPermission();        }
  • insertConstacts()方法如下:
    public void insertConstacts() {        ContentValues values = new ContentValues();        Uri rawContactUri = mContext.getContentResolver().insert(                ContactsContract.RawContacts.CONTENT_URI, values);//EPApplication是我定义的Application的子类,getContextObject方法返回的是context        long rawContactId = ContentUris.parseId(rawContactUri);        // 表插入姓名数据        values.clear();        values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);        values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);// 内容类型        values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "维拉报警电话");        mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI,                values);        //写入电话        values.clear();        values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);        values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);        values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "95213176");        values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);        mContext.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);        //写入头像        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher);        ByteArrayOutputStream out = new ByteArrayOutputStream();        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);        try {            out.flush();            out.close();        } catch (IOException e) {            e.printStackTrace();        }        values.clear();        values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);        values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);        values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, out.toByteArray());        mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI,                values);    }
  • 最开始会因为没有权限而进入catch,会执行的是getWrieteConstactsPermission()方法,此方法主要是申请权限和调用onRequestPermissionsResult()回调。
    来看一下getWrieteConstactsPermission()方法:
    private void getWrieteConstactsPermission() {        if (ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED){            if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity,                    android.Manifest.permission.WRITE_CONTACTS)){               new AlertDialog.Builder(mContext).setTitle("维拉将获取写入联系人权限").setPositiveButton("接受", (dialog, which) -> ActivityCompat.requestPermissions(mActivity,                       new String[]{android.Manifest.permission.WRITE_CONTACTS},                       WRITE_PERMISSION_REQUEST)).setNegativeButton("拒绝", (dialog, which) -> Toast.makeText(mContext, "用户拒绝获取联系人权限!", Toast.LENGTH_SHORT).show()).show();            }else {                ActivityCompat.requestPermissions(mActivity,                        new String[]{android.Manifest.permission.WRITE_CONTACTS},                        WRITE_PERMISSION_REQUEST);            }        }    }
  • 当用户允许获取写入权限,WRITE_PERMISSION_REQUEST是个整型数据,作为onRequestPermissionsResult()的requestCode。

    • 所以在activity中需要重写onRequestPermissionsResult()方法。
    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        Log.i("lgq","requestCode:" + requestCode);        if(requestCode == ConstactsUtils.WRITE_PERMISSION_REQUEST){            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                constacts.insertConstacts();            }        }    }

  • 看出来了把,此处调用了insertConstacts()方法,也就是申请到权限后立马写入联系人,ok!到此就可以结束了。

打卡收工!!

原创粉丝点击