私には理解できない問題があります。 Eclipseを使用して独自のコンテンツプロバイダーを作成していますが、次のエラーが発生し続けます。
[..]エラー/ ActivityThread(1051):my.package.provider.countrycontentproviderのプロバイダー情報が見つかりませんでした
ここにあるコード: http://codepad.org/Rx00HjHd
主要な部分:
public class CountryContentProvider extends ContentProvider {
public static final String PROVIDER =
"my.package.provider.countrycontentprovider";
public static final Uri CONTENT_URI =
Uri.parse("content://" + PROVIDER + "/country");
// ...
@Override
public boolean onCreate() { return true; }
// ...
}
// from my activity
ContentResolver resolver = getContentResolver();
Cursor c = resolver.query(CountryContentProvider.CONTENT_URI,
null, null, null, null);
// AndroidManifest.xml
<provider
Android:name="my.package.provider.CountryContentProvider"
Android:authorities="my.package.provider.countrycontentprovider" />
プロバイダーをマニフェストに追加し、onCreate
関数からtrueを返しました。アクティビティでCountryContentProvider.CONTENT_URI
を使用してプロバイダーからコンテンツを取得しますが、そのエラーメッセージが表示されるだけです。 (Eclipseがメルトダウンした場合)コードを3回削除して追加しましたが、役に立ちませんでした。
何かが欠けているに違いありません。誰かが私を正しい方向に向けることができますか?
<provider>を<application> ... </ application>タグから移動したときに、問題を再現できました。 Eclipseはエラーや警告のようなことを何も言いませんでした。
幸いなことに、この問題はADT 20以降のAndroid Lintによって検出されます。
マニフェストファイルのAuthorities
タグにフルパスを指定した後にのみ機能しました(SDKのSearchableDictionaryサンプルコードを参照)。
<provider Android:name=".DictionaryProvider"
Android:authorities="com.example.Android.searchabledict.DictionaryProvider">
マニフェストのプロバイダータグでエクスポートされた属性をtrueに設定すると、うまくいきました:
Android:exported="true"
ドキュメント( http://developer.Android.com/guide/topics/manifest/provider-element.html#exported )によると、エクスポートはプロバイダーが他に利用できる場合にのみ必要ですアプリケーション。しかし、これは私のために働いた唯一の解決策です。
XMLファイルのAndroid:authorities =は、おそらく作成したコントラクトクラスにあるコンテンツ機関です。コンテンツ権限がスキームに追加され、ベースコンテンツURIが作成されます。平易な英語、com.domain.sub.appNameでアプリに上限を設けないために使用した逆ドメイン。
Android:nameは、プロバイダーに名前が付けられたフォルダーとクラスです。ドット.folder.ProviderClassContentAuthorityIsInを忘れないでください。
お役に立てれば :)