【Android】プロセス通信IPC-ContentProvider
概要
コンテンツプロバイダは、データをカプセル化し、ContentResolverを介してアプリケーションに提供するアプリケーションにコンテンツを提供します.ContentProviderは、複数のアプリケーション間でデータを共有する必要がある場合にのみ必要です.Androidは、一般的なデータの一部にデフォルトのContentProviderを提供しています.
データプロバイダ Provider ContentProviderはAndroidManifestにある必要があります.xmlで宣言します.
説明
authorities
ported
adPermission
itePermission
注意:ContentProviderのauthoritiesは一意でなければなりません.2つのAPPで同じauthoritiesを宣言することはできません.そうしないと、インストール時にINSTALL_をエラーで報告します.FAILED_CONFLICTING_PROVIDER ContentProviderはContentProviderを継承し、実装する必要があるメソッド(onCreate,getType,insert,delete,update,query)を実装する.
コンテンツ・アクセス者
ContentResolverを使用してデータベースにアクセスし、コンテンツプロバイダのUriに転送します.ContentProviderのプログラムにアクセスするとアプリケーションが起動します.権限声明必要に応じてAndroidManifest.xmlは必要な読み書き権限を追加します. データ操作ContentResolverを使用してinsert,delete,update,query操作 を行う.
コンテンツプロバイダは、データをカプセル化し、ContentResolverを介してアプリケーションに提供するアプリケーションにコンテンツを提供します.ContentProviderは、複数のアプリケーション間でデータを共有する必要がある場合にのみ必要です.Androidは、一般的なデータの一部にデフォルトのContentProviderを提供しています.
データプロバイダ
説明
authorities
ported
adPermission
itePermission
注意:ContentProviderのauthoritiesは一意でなければなりません.2つのAPPで同じauthoritiesを宣言することはできません.そうしないと、インストール時にINSTALL_をエラーで報告します.FAILED_CONFLICTING_PROVIDER
@Override
public boolean onCreate() {
mContext = getContext();
mUserDBHelper = new UserDBHelper(mContext);
db = mUserDBHelper.getWritableDatabase();
mUriMatcher.addURI(AUTHORITIES, PATH, CODE);
return true;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
if (isMatch(uri)) {
return db.delete(UserDBHelper.TABLE_USER, selection, selectionArgs);
}
return 0;
}
@Override
public String getType(Uri uri) {
// at the given URI.
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
if (isMatch(uri)) {
long id = db.insert(UserDBHelper.TABLE_USER, null, values);
return ContentUris.withAppendedId(uri, id);
}
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
if (isMatch(uri)) {
return db.query(UserDBHelper.TABLE_USER, projection, selection, selectionArgs, null, null, sortOrder);
}
return null;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
if (isMatch(uri)) {
return db.update(UserDBHelper.TABLE_USER, values, selection, selectionArgs);
}
return 0;
}
/**
*
* @param uri
* @return
*/
private boolean isMatch(Uri uri) {
return CODE == mUriMatcher.match(uri);
}
コンテンツ・アクセス者
ContentResolverを使用してデータベースにアクセスし、コンテンツプロバイダのUriに転送します.ContentProviderのプログラムにアクセスするとアプリケーションが起動します.
getContentResolver().insert(uri, contentValues);
getContentResolver().delete(mUri, "name like ?", new String[]{"visitor%"});
getContentResolver().update(mUri, contentValues, "name like ?", new String[]{"visitor%"})
getContentResolver().query(mUri, new String[]{"id", "name", "age", "address"}, null, null, null)