Android ContentProvider

1.适用场景

1) ContentProvider为存储和读取数据提供了统一的接口

2) 使用ContentProvider,应用程序可以实现数据共享

3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)


// ContentProvider的主要方法   根据Uri的匹配(UriMatcher)来确定同一方法中操作的不同表






// 其实ContentProvider的增、删、改、查方法最后的具体操作也是通过SQLiteOpenHelper来获取SQLiteDatabase实现的
// 不过ContentProvider通过暴露Uri来实现不同应用程序间的数据共享

public abstract Uri insert(Uri uri, ContentValues values)
public abstract int delete(Uri uri, String selection, String[] selectionArgs)
public abstract int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
public abstract Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
// android提供的另一种跨进程的方法,根据method传进来的值去执行不同的操作,
public Bundle call(String method, String arg, Bundle extras)
// provider有个一个获取权限管理的方法,因为某些数据库的操作需要该进程具有某项权限
public AppOpsManager getAppOpsManager()public final String getCallingPackage() 
// 其他方法只能自己去源码看了


//这几个方法的调用时通过ContentResolver调用的 
//android通过方法参数的Uri去确定具体调用那个provider 
public final Uri insert(Uri url, ContentValues values) 
public final int delete(Uri url, String where, String[] selectionArgs) 
public final int update(Uri uri, ContentValues values, String where, String[] selectionArgs) 
public final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 
public final Bundle call(Uri uri, String method, String arg, Bundle extras) 

// ContentProvider在AndroidManifest.xml的配置: 
<provider
   android:name=".DownloadStorageProvider"
   android:authorities="com.android.providers.downloads.documents"    // Uri的authorities,android区分不同uri对应的provider的根据
   android:grantUriPermissions="true" // 解释
   android:exported="true"          //是否能被其他进程调用
   android:permission="android.permission.MANAGE_DOCUMENTS">     // 权限
   <intent-filter>
       <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
   </intent-filter>
</provider> 





你可能感兴趣的:(android,ContentProvider)