Uint7:内容提供器

1.权限

权限分为两种:普通权限和危险权限

普通权限在.xml中进行权限声明
危险权限需要进行运行时处理

//   1.先判断是否有权限
                if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//                    没有授权
                    ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
//   2.requestPermission会开启一个弹出框询问是否开启授权,结果封装到OnRequestPermissionsResult中的getResults参数中
                } else {
//                    获取授权
                    Intent intent = new Intent(Intent.ACTION_CALL);
                    intent.setData(Uri.parse("tel:10086"));
                    startActivity(intent);
                }
//  3.重写弹出框选项
    @SuppressLint("MissingPermission")
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Intent intent = new Intent(Intent.ACTION_CALL);
                    intent.setData(Uri.parse("tel:10086"));
                    startActivity(intent);
                } else {
                    Toast.makeText(this, "你没有获取授权", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

访问现有内容器

须知:
Context.getContentResolver()获取ContentResolver对象,通过
.query(..)
.insert(Uri,ContentValues)
.delete(Uri,Selection,SelectionArgs)
.update(Uri,ContentValues,selection,selectionArgs)

  ContentValues values = new ContentValues();
  Uri uri =  uri.parse("content://com.example.test/table")

查询

        // Uri                指定查询某个项目下的某个表
        // projection         指定查询的列名
        // selection          指定查询的限制条件
        // selectionArgs      指定占位符的数据
        // orderBy            指定结果的排序
        Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, null, null, null);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                contactList.add(displayName +"\n" + number);
            }
            adapter.notifyDataSetChanged();
            cursor.close();
        }


 
                Uri uri = Uri.parse("content://com.example.unit6_3_sqlife.provider/book");
                Cursor cursor = getContentResolver().query(uri, null, null, null, null);
                if (cursor != null) {
                    while (cursor.moveToNext()) {
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        System.out.println(name);
                    }
                    cursor.close();
                }

     

自定义内容器

public class DatabaseProvider extends ContentProvider {
    public static final int BOOK_DIR = 0;
    public static final int BOOK_ITEM = 1;
    public static final int CATEGORY_DIR = 2;
    public static final int CATEGORY_ITEM = 3;
    public static final String AUTHORITY = "com.example.unit6_3_sqlife.provider";
    private static UriMatcher uriMatcher;
    private MydatabaseHelper dbHelper;

    static {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI(AUTHORITY,"book",BOOK_DIR);
        uriMatcher.addURI(AUTHORITY,"book/#",BOOK_ITEM);
        uriMatcher.addURI(AUTHORITY,"category",CATEGORY_DIR);
        uriMatcher.addURI(AUTHORITY,"category/#",CATEGORY_ITEM);

    }
    
    /**
     * 初始化新建一个数据库
     * @return
     */
    @Override
    public boolean onCreate() {
        dbHelper = new MydatabaseHelper(getContext(), "BookStore,db", null, 2);
        return true;
    }
    
    /**
     * 将Uri转变成对应的类型
     * @param uri
     * @return
     */
    @Override
    public String getType(Uri uri) {
        switch (uriMatcher.match(uri)) {
            case BOOK_DIR:
                return "vnd.android.cursor.dir/vnd.com.example.unit6_3_sqlife.provider.book";
            case BOOK_ITEM:
                return "vnd.android.cursor.item/vnd.com.example.unit6_3_sqlife.provider.book";
            case CATEGORY_DIR:
                return "vnd.android.cursor.dir/vnd.com.example.unit6_3_sqlife.provider.category";
            case CATEGORY_ITEM:
                return "vnd.android.cursor.item/vnd.com.example.unit6_3_sqlife.provider.category";

        }
        return null;
    }

    
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        Uri uriReturn = null;
        switch (uriMatcher.match(uri)) {
            case BOOK_DIR:
            case BOOK_ITEM:
                long newBookId = db.insert("Book", null, values);
                uriReturn = Uri.parse("content://" + AUTHORITY + "/book/" + newBookId);
                break;
            case CATEGORY_DIR:
            case CATEGORY_ITEM:
                long newCategoryId = db.insert("Category", null, values);
                uriReturn = Uri.parse("content://" + AUTHORITY + "/category" + newCategoryId);
                break;
            default:
                break;
        }
        return uriReturn;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }
    
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        // TODO: Implement this to handle query requests from clients.
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        Cursor cursor = null;
        switch (uriMatcher.match(uri)) {
            case BOOK_DIR:
                cursor = db.query("Book", projection, selection, selectionArgs, null, null, sortOrder);
                System.out.println("有人查询book了,cursor 是:" + cursor);
                break;
            case BOOK_ITEM:
                String bookId = uri.getPathSegments().get(1);
                cursor = db.query("Book", projection, "id = ?", new String[]{ bookId }, null, null, sortOrder);
                break;
            case CATEGORY_DIR:
                cursor = db.query("Category", projection, selection, selectionArgs, null, null, sortOrder);
                break;
            case CATEGORY_ITEM:
                String categoryId = uri.getPathSegments().get(1);
                cursor = db.query("Category", projection, "id = ?", new String[]{categoryId}, null, null, sortOrder);
                break;
            default:
                break;
        }

       return cursor;
    }   
}

.XML中注册:

<provider
            android:name=".DatabaseProvider"
            android:authorities="com.example.unit6_3_sqlife.provider"
            android:enabled="true"
            android:exported="true">
</provider>
posted @ 2020-09-16 20:10  ssy197  阅读(152)  评论(0)    收藏  举报