五、ContentProvider相关
ContentProvider内容提供者: 负责数据存取,常用于APP进数据共享,跨进程数据存取等…比如读取相册,读取联系人,都是ContentProvider来实现的
- **1.**我们想在自己的应用中访问别的应用,或者说一些ContentProvider暴露给我们的一些数据, 比如手机联系人,短信、相册等!我们想对这些数据进行读取或者修改,这就需要用到ContentProvider了!
- **2.**我们自己的应用,想把自己的一些数据暴露出来,给其他的应用进行读取或操作,我们也可以用到ContentProvider,另外我们可以选择要暴露的数据,就避免了我们隐私数据的的泄露!
1.权限申请
从android6.0开始,凡是涉及用户隐私的权限(读写短信,读写联系人,拍摄,录音等等),都需要运行时申请,弹窗提醒用户是否授权。用户不授权则无法继续操作
首先在AndroidManifest.xml中声明读取通信录的权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
运行时动态申请权限,请求用户授权
class TestContentProviderActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//判断读取通讯录的允许
if(ActivityCompat.checkSelfPermission(this , android.Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){
//如果未授权
ActivityCompat.requestPermissions(
this ,
arrayOf(android.Manifest.permission.READ_CONTACTS) ,
100)
}else{
getContacts() //读取联系人
}
}
//读取联系人
private fun getContacts() {
Toast.makeText(this, "getContacts", Toast.LENGTH_SHORT).show()
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(requestCode==100 && permissions[0]==android.Manifest.permission.READ_CONTACTS){
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
//表示授予权限
getContacts()
}else{
Toast.makeText