内容提供器
运行时权限
(1)授权方式:非一次性授权、按需授权
(2)权限类型:普通权限、危险权限
危险权限
申请权限代码
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);
代码
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.