2017-12-28 15 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 

다른 자원에서 제안한 것처럼 : 예, 나는 내 콘텐츠 제공 업체에 권한을 설정했습니다. 이 오류는 터무니 없습니다. null과 사용자 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.getAuthority()을 사용하여 URI의 정의와 그로부터 파생 된 권한에 있습니다.

오픈 소스 인 Google IO Schedule 앱인 Google 자체 소프트웨어의 클래식 BUG와 페어링하십시오. 자신의 DataBootstrapService 93에서

, 그들은 이렇게 :

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

하지만, 내가 모르는 무엇을 : ScheduleContract.CONTENT_AUTHORITY 만 권한을 포함하는 문자열입니다. 그것은 유효한 URI를 만들지 않으므로 이것은 처음부터 버그가있어서 내 문제로 이어집니다.

이 만든 Uri를 테스트하고 getAuthority을 호출하면 null이 표시됩니다.

수정 : BASE_CONTENT_URI과 같이 "content : //"+ AUTHORITY 만 사용하십시오. 그런 다음 수정되었습니다.

다른 사람들에게 도움이되기를 바랍니다.