600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 自定义内容提供者

自定义内容提供者

时间:2024-03-01 16:18:10

相关推荐

自定义内容提供者

自定义内容提供者

一.什么是内容提供者二.内容提供者角色1.内容提供方ContentProvider2.内容索取方ContentResolver三.自定义内容提供者1.自定义内容提供方步骤:(1)自定义类继承ContentProvider并重写其方法(2)清单文件注册内容提供者2.编写内容索取方四.自定义权限1.内容提供方的清单文件中声明权限2.内容索要方的清单文件中使用权限

一.什么是内容提供者

内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。

二.内容提供者角色

1.内容提供方ContentProvider

2.内容索取方ContentResolver

说明:通过内容提供者获得手机联系人、短信、音频等文件时,提供方为目标APP,而我们只是操作索取方

三.自定义内容提供者

1.自定义内容提供方

步骤:

(1)自定义类继承ContentProvider并重写其方法
onCreate():用来判断是否获得了数据库insert()delete()update()query()getType():该方法返回类型,通过类弄可以知道Cursor中数据是一条还是多条,一般返回null即可

public class MyContentProvider extends ContentProvider {MyOpenHelper openHelper;SQLiteDatabase database;/*** 获得数据库* @return*/@Overridepublic boolean onCreate() {openHelper = new MyOpenHelper(getContext());database = openHelper.getWritableDatabase();if(database != null)return true;elsereturn false;}@Nullable@Overridepublic Cursor query( @NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {return database.query("user",projection,selection,selectionArgs,null,null,sortOrder);}/*** 返回是一条数据还是多条数据* @param uri* @return*/@Nullable@Overridepublic String getType( @NonNull Uri uri) {return null;}@Nullable@Overridepublic Uri insert( @NonNull Uri uri, @Nullable ContentValues values) {database.insert("user",null,values);return uri;}@Overridepublic int delete( @NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {return database.delete("user",selection,selectionArgs);}@Overridepublic int update( @NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {return database.update("user",values,selection,selectionArgs);}}

(2)清单文件注册内容提供者

<providerandroid:authorities="com.bawei.1804A"android:name=".MyContentProvider"android:exported="true"/>

说明:android:authorities就是uri地址 android:exported=true可被其他app访问

2.编写内容索取方

说明:

Uri uri = Uri.parse(“content://后面是提供方清单文件中的值”);,其中”content://”一定要加内容索取方可以新建项目来编写,这样可以更好的体验内容提供者跨app的作用

public class MainActivity extends AppCompatActivity {Uri uri;ContentResolver resolver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);uri = Uri.parse("content://com.bawei.1804A");resolver = getContentResolver();}public void read(View view) {ContentValues values = new ContentValues();values.put("uname","ck");resolver.insert(uri,values);}public void updateUser(View view) {ContentValues values = new ContentValues();values.put("uname","LV");values.put("age",10);values.put("sex","女");values.put("birthday",new Date().toString());resolver.update(uri,values,"uname = ?",new String[]{"ck"});}public void deleteUser(View view) {resolver.delete(uri,null,null);}public void queryUser(View view) {Cursor cursor = resolver.query(uri,null,null,null,null);while (cursor.moveToNext()){int uid = cursor.getInt(cursor.getColumnIndex("uid"));String uname = cursor.getString(cursor.getColumnIndex("uname"));int age = cursor.getInt(cursor.getColumnIndex("age"));String sex = cursor.getString(cursor.getColumnIndex("sex"));String birthday = cursor.getString(cursor.getColumnIndex("birthday"));Log.d("amy",uid+"-"+uname+"-"+age+"-"+sex+"-"+birthday);}}}

四.自定义权限

1.内容提供方的清单文件中声明权限

<permission android:name="bawei.1804.read"/><permission android:name="bawei.1804.write"/>

2.内容索要方的清单文件中使用权限

<uses-permission android:name="bawei.1804.read"/><uses-permission android:name="bawei.1804.write"/>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。