目录
1、创建ContentProvider,继承ContentProvider
2、重写onCreate(),insert(),select(),update(),deleter(),getType()方法。
1、修改内容提供方的清单文件 自定义权限+内容提供者注册的时候使用权限。
什么是ContentProvider?
定义:ContentProvider是操作其他应用程序内容的组件
如何使用ContentProvider?
获取手机里的联系人
Uri phoneUri =ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
ContentResolver cr = context.getContentResolver();
Cursor cursor = cr.query(phoneUri,new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER},null,null,null);
while (cursor.moveToNext()){
}
获取手机里的短信
Uri uri= Uri.parse("content://sms/");
Cursor cursor=cr.query(uri,null,null,null,null);
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex("body"));
}
cursor.close();
获取手机里的图片
Intent image = new Intent(Intent.ACTION_PICK); image.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(image, 100);
自定义内容提供者(ContentProvider)
如何使用ContentProvider
1、创建ContentProvider,继承ContentProvider
public class MyContentProvider extends ContentProvider {
//使用sqlite数据库
}
2、重写onCreate(),insert(),select(),update(),deleter(),getType()方法。
3、注册内容提供者的Uri
static {
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(AUTHORITY, "person", CODE_PERSON);
}
4、清单文件中配置Provider
<provider android:name="com.example.mycontentprovider.MyContentProvider" android:authorities="com.example.mycontentprovider.provider" android:exported="true" >
</provider>
5、访问(写这么细还看不懂,那就放弃吧,回家继承家业吧)
String AUTHORITIES = "com.example.mycontentprovider.provider";
String uri = "content://" + AUTHORITIES + "/person";
Cursor cursor = cr.query(Uri.parse(uri), null, null, null, null);
while (cursor.moveToNext()) {
int _id = cursor.getInt(0);
}
自定义内容提供者ContentProvider案例
没有找到,用的不多,不好找
自定义权限
当系统自带权限不能满足需求时,我们需要自定义权限
自定义权限----内容提供方
1、修改内容提供方的清单文件 自定义权限+内容提供者注册的时候使用权限。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.my_contentprovider">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--注册内容提供者 exported能否被其他应用程序访问(重要) authorities:uri(全小写) name:类的全路径-->
<provider
android:readPermission="com.bawei.permission.READ"
android:writePermission="com.bawei.permission.WRITE"
android:exported="true"
android:authorities="com.bawei"
android:name=".MyProvider"></provider>
</application>
<!--1.自定义权限 (注意位置,没有在application里面)-->
<permission
android:name="com.bawei.permission.READ"
android:protectionLevel="normal">
</permission>
<permission
android:name="com.bawei.permission.WRITE"
android:protectionLevel="normal" >
</permission>
</manifest>
<!--注册内容提供者 exported能否被其他应用程序访问(重要) authorities:uri(全小写) name:类的全路径-->
<provider
android:readPermission="com.bawei.permission.READ"
android:writePermission="com.bawei.permission.WRITE"
android:exported="true"
android:authorities="com.bawei"
android:name=".MyProvider"></provider>
</application>
自定义权限---内容解析方
1、内容解析方清单文件添加权限
<uses-permission android:name="com.bawei.permission.WRITE"></uses-permission>
<uses-permission android:name="com.bawei.permission.READ"></uses-permission>