MobileApp > Android > Content Provider
マニフェストファイルにアクセス権を実装する必要がある
例)電話帳アクセス:android.permission.READ_CONTACTS
実際のマニフェストファイルの例 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" /> <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /> <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
使用するURIを指定する
例)電話帳の場合:content://contacts/people/ = android.provider.People.CONTENT_URI
"content://"+パッケージ名+"."+クラス名+"/"+データカテゴリ+"/"+データのid
//最初のレコードを取得 final Uri uri = ContentUris.withAppendedId(android.provider.Contacts.People.CONTENT_URI, 1); final Cursor result = managedQuery(uri, null, null, null, null); //名前を格納した列のインデックスを取得 final int index = result.getColumnIndex(android.provider.Contacts.People.NAME); //最初の要素を取得(本当は成功したかどうかチェックすべきだが例ためしない) result.moveToNext(); final String name1 = result.getString(index);
ファイルの書き込み方法
a.コンテントプロバイダに格納したいファイルの属性を設定する
//外部メディアを指定 Uri media = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; //保存するイメージ属性を設定 ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DISPLAY_NAME,name); values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg");
b.コンテントプロバイダから格納領域を取得し、そこに実ファイルを捻じ込む
//イメージを格納する領域を確保して、そのURIを取得する ContentResolver r= getContentResolver(); Uri imageUri = r.insert(media,values); try{ //収録したUriからアプトプットストリームを取り出す OutputStream out = r.openOutputStream(imageUri); bimap.compress(Bitmap.CompressFormat.JPEG,50,out); } catch (FileNotFoundException e) { Log.e("HelloContentsProviders" , e.toString() ); return null; }