2012年01月08日

INSTALL_FAILED_CONFLICTING_PROVIDERの理由とコンテンツプロバイダの仕様について調べてみた。

人気ブログランキングへ

Androidプログラミングバイブル SDK 4/3/2対応

新品価格
¥3,129から
(2012/1/8 09:09時点)



androidでSearch Managerを使って検索システムを実装しようとした。
やり方は以下のサイトに載っているので参考にさせていただいた。
http://y-anz-m.blogspot.com/2010/03/android-searchmanager.html

しかし、なぜか以下のエラーが出てエミュレーターに
apkファイルがインストールされなかった。
[2012-01-07 18:31:05 - ファイル名] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
[2012-01-07 18:31:05 - ファイル名] Please check logcat output for more details.
[2012-01-07 18:31:05 - ファイル名] Launch canceled! 


以下、理由とコンテンツプロバイダの仕様について調べた。

理由は以下のサイトに載っていた。
http://hustleplay.wordpress.com/2010/02/28/android-install_failed_conflicting_provider/

どうやら、AndroidManifest.xmlで指定したandroid:authoritiesが
別アプリと同じ名前だとダメらしい。
実際直したら動いた。

しかし、理由が不明すぎる。
なのでもうちょっと調べてみた、
そもそもコンテンツプロバイダとは、
アプリケーションで管理しているデータを別アプリでも使えるように保存するというものだ。

しかし、別アプリで宣言している名前と同じものを宣言したら
上記のエラーが出たわけですので、意味が分からない。
共有できないじゃん

しかし、以下のサイトを見たら、実は以下の仕様になっているらしい。
アプリケーションの部品として開発されるコンテンツプロバイダのみを宣言する必要があり、
外部で開発されたものをアプリケーションで使用する場合は、宣言する必要はありません

http://www.techdoctranslator.com/android/guide/manifest/provider-element

実際に宣言せずに使ったら別アプリのコンテンツプロバイダにアクセスできた。
なので、結論は以下になる。
・アプリの部品として開発されたコンテンツプロバイダは、AndroidManifest.xmlに宣言が必要
・同じ名前で複数のアプリの部品としてコンテンツプロバイダは宣言できない
・あるアプリが別アプリのコンテンツプロバイダを参照するときは宣言してはいけない

これで納得がいきました(・∀・)
コンテンツプロバイダを使うときには気を付けてください


タグ:android
posted by マスタカ at 09:14 | Comment(0) | TrackBack(0) | PC・携帯 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。