ContentProvider的简单使用

简介: ContentProvider的简单使用

ContentProvider 提供app间跨进程数据的共享,只是一种机制,本身并不提供数据存储服务,需配合数据库或别的持久化存储使用。

public class MyProvider extends ContentProvider {
 
    private static final String AUTHORITY = "com.example.test.provider"; //用于区分不同的ContentProvider
 
    private static final UriMatcher sUriMatcher;
    private static final int CODE1 = 0;
 
    private static final int CODE2 = 1;
 
    private static final String F1 = "f1";
 
    private static final String F2 = "f2";
 
    static {
        sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        //只对这两种uri进行处理 如果匹配上 通过 sUriMatcher.match(uri)可以得到 对应的Code
        sUriMatcher.addURI(AUTHORITY, F1, CODE1);
        sUriMatcher.addURI(AUTHORITY, F2, CODE2);
    }
 
    @Override
    public boolean onCreate() {
        return true;
    }
 
    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
            @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        String[] tableCursor = new String[] { "name", "job", "salary" };
        MatrixCursor cursor = new MatrixCursor(tableCursor);
        switch (sUriMatcher.match(uri)) {
            case CODE1:
                cursor.addRow(new Object[] { "1111", "111", "11" });
                break;
            case CODE2:
                cursor.addRow(new Object[] { "2222", "222", "22" });
                break;
        }
        return cursor;
    }
 
    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }
 
    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        return null;
    }
 
    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection,
            @Nullable String[] selectionArgs) {
        return 0;
    }
 
    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection,
            @Nullable String[] selectionArgs) {
        return 0;
    }
}
public class MyService extends Service {
    private static final String AUTHORITY = "com.example.test.provider";
    public static Uri sUri = Uri.parse("content://" + AUTHORITY + "/f2");
 
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
查找
        Cursor query = getContentResolver().query(sUri, null, null, null, null, null);
        if (query!=null){
            query.moveToNext();
            String s0 = query.getString(0);
            String s1 = query.getString(1);
            Log.e("test","s0"+s0+"    s1"+s1);
        }
        return super.onStartCommand(intent, flags, startId);
    }
}
 <service android:name=".MyService" />
 
        <provider
            android:authorities="com.example.test.provider"
            android:name=".MyProvider"
            android:exported="true"
            android:enabled="true"/>


目录
相关文章
|
4天前
|
数据库 Android开发 开发者
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
52 0
|
3天前
|
存储 缓存 Java
ContentProvider的启动
ContentProvider的启动
14 1
|
4天前
|
存储 安全 Android开发
Android数据存储:请解释ContentProvider是什么,它的主要作用是什么?
ContentProvider是Android的四大组件之一,主要负责结构化数据的管理与共享。它封装数据并提供安全的访问接口,通过URI实现应用间数据的标准化共享。ContentResolver与ContentProvider协作,处理数据的CRUD操作,使得其他应用能方便地调用和操作数据。
20 0
|
4天前
|
Java 开发工具 Android开发
[Android AIDL] --- AIDL原理简析
[Android AIDL] --- AIDL原理简析
40 0
|
9月前
|
Java Android开发
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
53 0
|
存储 Java Android开发
android LifeCycle-简单使用和详细原理解析
android LifeCycle-简单使用和详细原理解析
468 0
android LifeCycle-简单使用和详细原理解析
|
数据库 Android开发
VirtualApk源码分析-ContentProvider插件化
android通过ContentProvider可以实现进程间的数据共享,例如APP通过MediaProvider可以访问多媒体数据库的内容。通常我们在Activity通过getContentResolver().
1331 0