![]() | Androidプログラミングバイブル SDK 4/3/2対応 新品価格 |

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