コンテントプロバイダを公開しない方法
久々に更新。
Android Dev Phoneも3週間ほどで返ってきて、必死にAndroidアプリの勉強中。
Androidではデータベースへのアクセスはコンテントプロバイダってのを使うのが基本らしいが、他のアプリからも利用可能になるらしい。アプリによってはデータを公開したくないけど、コンテントプロバイダの仕組みを使いたい!って場合もあると思うので調査。
AndroidアプリのContactっていうのは、アドレス帳を他のアプリに公開しているが、それを使うときにはpermissionの設定が必要。そこにヒントがあると思い、AndroidのソースコードからContactsProviderを参照。AndroidManifest.xmlのproviderの定義にpermissionの設定をしているようだ。「Google Android プログラミング入門」の本を参考にして、以下のような感じになると思う。
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.ne.hatena.haruser.android" android:versionCode="1" android:versionName="1.0"> <!-- 自分のアプリで使う場合にも許可情報の追加が必要 --> <uses-permission android:name="jp.ne.hatena.haruser.android.permission.XXXXX" /> <!-- コンテントプロバイダへのアクセス許可設定 --> <!-- "signature"を指定することで署名が同じアプリに対してのみ許可する --> <permission android:name="jp.ne.hatena.haruser.android.permission.XXXXX" android:label="@string/permission_lavel" android:description="@string/permission_description" android:protectionLevel="signature" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- コンテントプロバイダへのアクセスに許可情報を要求 --> <provider android:name=".XXXXXProvider" android:authorities="jp.ne.hatena.haruser.android.XXXXXProvider" android:permission="jp.ne.hatena.haruser.android.permission.XXXXX" /> 以下略
署名が同じ場合はアクセス可能だが、まぁ公開しなければ同じになることはないから上記のようにしておけば他のアプリからデータにアクセスされることはないと思う。
- 作者: 江川崇,竹端進,山田暁通,麻野耕一,山岡敏夫,藤井大助,藤田泰介,佐野徹郎
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2009/07/01
- メディア: 大型本
- 購入: 20人 クリック: 469回
- この商品を含むブログ (59件) を見る
2011/05/19 追記
どうやら、異なる署名のアプリに対してもちゃんと制御する仕組みがあるらしい
ContentProvider で特定のアプリにのみ利用を許可する - おともだちティータイム
Sign in - Google Accounts