ContentProvider基本使用

 manifest.xml修改,添加权限和规则

    <uses-permission android:name="menu.permission.sourcename.READ_CONTENT" />
    <uses-permission android:name="menu.permission.sourcename.WRITE_CONTENT" />

    <permission
        android:name="menu.permission.sourcename.READ_CONTENT"
        android:label="Permission for read content provider"
        android:protectionLevel="normal" />
    <permission
        android:name="menu.permission.sourcename.WRITE_CONTENT"
        android:label="Permission for write content provider"
        android:protectionLevel="normal" />

    <application
        android:name="com.cultraview.ctvmenu.utils.ContextUtil"
        android:allowBackup="false"
        android:hardwareAccelerated="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" >
        <provider
            android:name="com.cultraview.ctvmenu.utils.SourceNameProvider"
            android:authorities="com.cultraview.ctvmenu"
            android:exported="true"
            android:grantUriPermissions="true"
            android:process=":provider"
            android:readPermission="menu.permission.sourcename.READ_CONTENT" 
            android:writePermission="menu.permission.sourcename.WRITE_CONTENT"
            />

        <activity
            android:name="com.cultraview.ctvmenu.ui.CtvMenu"
            android:hardwareAccelerated="true"
            android:launchMode="singleTask" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>

ContentProvider类

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;

public class NameProvider extends ContentProvider {

    private String mTableName;
    private Context mContext;
    private SQLiteDatabase mDatabase;
    private static final UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    
    public static final String AUTHORITY = "com.cultraview.ctvmenu";
    public static final Uri URI_CONTENT = Uri.parse("content://" + AUTHORITY + "/sourcename");
    public static final Uri URI_EDITNAME = Uri.parse("content://" + AUTHORITY + "/sourcename/editName");
    public static final Uri URI_INDEX = Uri.parse("content://" + AUTHORITY + "/sourcename/source_id");

    //rule
    private static final int INSERT = 0;
    private static final int DELETE = 1;
    private static final int QUERY = 2;
    private static final int UPDATE = 3;
    

    private EditSourceNameDBHelper dbHelper;
    
    //写入主机名的匹配规则
    static {
        mUriMatcher.addURI(AUTHORITY, "sourcename/insert", INSERT);
        mUriMatcher.addURI(AUTHORITY, "sourcename/delete", DELETE);
        mUriMatcher.addURI(AUTHORITY, "sourcename/query", QUERY);
        mUriMatcher.addURI(AUTHORITY, "sourcename/update", UPDATE);
    }
    
    //对外提供的匹配规则
    public interface URI{
        Uri INSERT = Uri.parse("content://"+AUTHORITY+"/sourcename/insert");
        Uri DELETE = Uri.parse("content://"+AUTHORITY+"/sourcename/delete");
        Uri QUERY = Uri.parse("content://"+AUTHORITY+"/sourcename/query");
        Uri UPDATE = Uri.parse("content://"+AUTHORITY+"/sourcename/update");
    }

    @Override
    public boolean onCreate() {
        initProvider();
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
            String sortOrder) {
        if (mUriMatcher.match(uri) == QUERY) {
            Cursor cursor = mDatabase.query(mTableName, projection, selection, selectionArgs, null,null, sortOrder);
            return cursor;
        }else {
            throw new IllegalAccessError("unKnow Uri,query="+uri);
        }
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        if (mUriMatcher.match(uri) == INSERT) {
            long id = mDatabase.insert("sourcename", null, values);
            uri = ContentUris.withAppendedId(URI_CONTENT, id);
            return uri;
        }else {
            throw new IllegalAccessError("unKnow Uri,Insert="+uri);
        }
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        if (mUriMatcher.match(uri) == DELETE) {
            int deleteCount = mDatabase.delete(mTableName, selection, selectionArgs);
            return deleteCount;
        }else {
            throw new IllegalAccessError("unKnow Uri,delete="+uri);
        }
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        if (mUriMatcher.match(uri) == UPDATE) {
            int updateCount = mDatabase.update(mTableName, values, selection, selectionArgs);
            return updateCount;
        }else {
            throw new IllegalAccessError("unKnow Uri,update="+uri);
        }
    }

    @Override
    public String getType(Uri arg0) {
        return null;
    }

    private void initProvider() {
        mTableName = EditSourceNameDBHelper.TABLE_NAME;
        mContext = getContext();
        dbHelper = new EditSourceNameDBHelper(mContext);
        mDatabase = dbHelper.getWritableDatabase();
    }
}

 使用时,

ContentResolver resolver = mContext.getContentResolver();

通过resolver调用ContentProvider类中的方法进行读写数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值