内容提供器

运行时权限

(1)授权方式:非一次性授权、按需授权
(2)权限类型:普通权限、危险权限

危险权限

image.png
image.png
image.png

申请权限代码

MainActivity类
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"));
startActivity(intent);
声明权限
<uses-permission android:name="android.permission.CALL_PHONE"/>

if(ContextCompat.checkSelfPermission(MainActivity.this,
   Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
	ActivityCompat.requestPermissions(MainActivity.this,
		new String[]{Manifest.permission.CALL_PHONE},1);
   }
   else{
    call();
   }

访问其他程序中的数据

内容提供器

通过ContentResolver类访问内容提供器共享的数据,实现增删改查功能,方法参数的是一个内容URI,不是表名

内容URI

唯一标识符 : 权限和路径
权限:采用程序包名,包名后面加.provider
路径:数据库中有table1和table2两张表,路径分别为/table1和/table2。•com.example.app.provider/table1
•com.example.app.provider/table2
标准格式:在字符串的头部加上协议声明形成内容URI的标准格式:
content://com.example.app.provider/table1
content://com.example.app.provider/table2

ContentResolver

Uri uri = Uri.parse("content://com.example.app.provider/table1");
使用Uri对象查询table1表中的数据:
Cursor cursor = getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);
image.png

代码

1.查询遍历
if (cursor != null) {
	while (cursor.moveToNext()) {
		String column1 = cursor.getString(cursor.getColumnIndex("column1"));
		int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
	}
	cursor.close();
}
2.添加数据:
ContentValues values = new ContentValues();
values.put("column1", "text");
values.put("column2", 1);
getContentResolver().insert(uri, values);
3.更新数据:
ContentValues values = new ContentValues();
values.put("column1", "");
getContentResolver().update(uri, values, "column1 = ? and column2 = ?",new String[] {"text", "1"});
4.删除数据:
getContentResolver().delete(uri, "column2 = ?", new String[] { "1" });

Q.E.D.


Welcome to our world !!