2017-12-28 7 views
1

これは前に尋ねられましたが、決して答えられませんでした。だから私はもう一度私の運を試す。Oreoの独自のURIにContentProvider.notifyChangeのセキュリティ例外があります

私のアプリは同期の点でGoogleのIOスケジュールアプリの完全なクローンです - 私はthisの位置に正確にコードを使用しています。

SDK 25に対して実行すると、すべてがここで働く - 私は26に行くとき、それはこの例外でクラッシュ:

12-28 21:11:13.641 6153-6190/? E/AndroidRuntime: FATAL EXCEPTION: IntentService[DataBootstrapService] 
               Process: de.XXX.XXX.debug, PID: 6153 
               java.lang.SecurityException: Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority 

他のリソースで示唆したように:YES、私は私のコンテンツプロバイダに権限を設定しています。 このエラーはばかげています。なぜそれがヌルとユーザー0になるのかわかりません。

誰が探しているのですか? ありがとう!

詳細についてはお尋ねしましたが、GoogleがIOスケジュールで行うように正確に行います。次のように

は私のAndroidManifestは私のプロバイダが含まれています

<provider 
     android:name=".provider.PendelbusProvider" 
     android:authorities="${applicationId}.provider" 
     android:exported="false" 
     android:syncable="true"/> 

クラッシュの原因となる行はこれです:

私CONTENT_AUTHORITYは次のように定義されて
getContentResolver().notifyChange(Uri.parse(PendelbusContract.CONTENT_AUTHORITY), null, false); 

:(介して間接的変数を構築)

public static final String CONTENT_AUTHORITY = BuildConfig.AUTHORITY; 
// equals to: "de.zordid.pendelbus.debug.provider" 

メッセージに示される内容はまったくわかりません。

「プロバイダnull」とは何ですか、「ユーザー0」とは何ですか?

+0

あなたのプロバイダのコンテンツuri、権限、および他のアプリやクラスからアクセスする方法を投稿してください – matrix

答えて

0

私の問題に対する答えは、URIの定義とその由来の権限に由来します(Uri.getAuthority()を使用)。

オープンソースのGoogle IOスケジュールアプリであるGoogle独自のソフトウェアの古典的なBUGとこれをペアにします。そのDataBootstrapService線93で

は、彼らがこれを行う:

getContentResolver().notifyChange(Uri.parse(ScheduleContract.CONTENT_AUTHORITY), null, false);

しかし、私は知りませんでした何を:ScheduleContract.CONTENT_AUTHORITYのみの権限を含む文字列です。これは有効なURIを作成しないので、これは最初からバグがあり、問題につながります。

この作成されたUriをテストしてgetAuthorityと呼ぶと、nullと表示されます。

修正: "content://" + AUTHORITYのみのBASE_CONTENT_URIのようなものを使用してください。その後、修正されました。

他人に役立つことを願っています。

関連する問題