Stworzyłem niestandardowego dostawcę treści, do którego będzie mieć dostęp jeszcze kilka aplikacji. Załączam TAG uprawnień w pliku dostawcy usługi AndroidManifest.xml, aw drugiej aplikacji dodałem tagu use-permissions, ale bez powodzenia. Logcat pokazuje mi:Odmowa zezwolenia: operator otwierający
java.lang.SecurityException: Permission Denial: opening provider com.company.contentprovider.AplicacaoContentProvider requires READ_DATABASE or WRITE_DATABASE.
Szukałem podobnych pytań, ale wygląda na to, że wszystko jest w porządku. Jakieś pomysły ? Dzięki!
Oto mój dostawca plik AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.contentprovider"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<permission android:name="READ_DATABASE" android:label="@string/app_read" android:protectionLevel="normal"></permission>
<permission android:name="WRITE_DATABASE" android:label="@string/app_write" android:protectionLevel="normal"></permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".CompanyProvider"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider android:name="AplicacaoContentProvider"
android:authorities="com.company.contentprovider"
android:exported="true"
android:readPermission="@string/app_read"
android:writePermission="@string/app_write"
/>
</application>
I to jest mój drugi plik AndroidManifest.xml zastosowanie:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testeprovider"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permissions.READ_DATABASE"/>
<uses-permission android:name="android.permissioms.WRITE_DATABASE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.testeprovider.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Dziękujemy! Jak tylko dojadę do pracy jutro, wprowadzę te modyfikacje i poinformuję o wynikach! –
Zadziałało, tak jak powiedziałeś, ale jest jeszcze jedna wątpliwość. Mam, powiedzmy, 20 innych aplikacji, które uzyskają dostęp do mojego dostawcy treści. Chcę, aby każda z moich aplikacji sprawdzała, czy dostawca zawartości istnieje. Jeśli tak, to po prostu używa uprawnień do rejestrowania danych. W przeciwnym razie zarejestruj dostawcę, a następnie zapisz dane. więc pomyślałem, że w pliku AndroidManifest.xml każdej aplikacji można umieścić zarówno tagi pozwolenia, jak i pozwolenia na użycie. Czy to zadziała? youtube downloader –
@MauricioAlencar: „Chcę każdemu z moich aplikacji, aby sprawdzić, czy dostawca treści istnieje, jeżeli tak, to po prostu. używa uprawnień do rejestrowania danych, w przeciwnym razie zarejestruj dostawcę, a następnie zapisz dane za." - to bardzo zły plan. Wszystkie 20 aplikacji należy całkowicie uniezależnić od siebie. W obecnej wersji Twój plan mówi, że jeśli użytkownik odinstaluje 1 z 20 - i 1 stanie się tym, który zdecydował się być "Dostawcą Treści" - stracą dane dla wszystkich 20 aplikacji. – CommonsWare