获取写入的权限
在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);
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!到此就可以结束了。
打卡收工!!