Ho creato un fornitore di contenuti personalizzato, a cui si accederà da qualche altra applicazione. Ho incluso il permesso TAG nel file del fornitore AndroidManifest.xml e nella seconda applicazione ho incluso il tag uses-permissions, ma non ci sono riuscito. Logcat mi mostra:Rifiuto dell'autorizzazione: fornitore di apertura
java.lang.SecurityException: Permission Denial: opening provider com.company.contentprovider.AplicacaoContentProvider requires READ_DATABASE or WRITE_DATABASE.
Ho cercato domande simili, ma sembra che tutto sia corretto. Qualche idea ? Grazie !!!
Ecco il mio provider di file 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>
E questo è il mio secondo file dell'applicazione AndroidManifest.xml:
<?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>
Grazie! Appena riuscirò a lavorare domani, farò queste modifiche e ti farò sapere i risultati! –
Ha funzionato, proprio come hai detto tu, ma c'è un altro dubbio. Ho, diciamo, altre 20 app che accederanno al mio fornitore di contenuti. Voglio ciascuna delle mie app per verificare se il content provider esiste. Se lo fa, quindi usa solo il permesso per registrare i dati. Altrimenti, registrare il provider e quindi registrare i dati. quindi, ho pensato di includere sia i permessi che i permessi di utilizzo-tag nel file AndroidManifest.xml di ogni app. Funzionerà? youtube downloader –
@MauricioAlencar: "Voglio che ogni una delle mie applicazioni per verificare se esiste il fornitore di contenuti Se lo fa, poi basta. usa il permesso per registrare i dati, altrimenti registra il provider e quindi registra i dati un." - Questo è un piano estremamente cattivo. Si prega di rendere tutte le 20 applicazioni completamente indipendenti l'una dall'altra. Così com'è, il tuo piano dice che se l'utente dovesse disinstallare 1 dei 20 - e quello 1 è stato il 1 che ha deciso di essere il "ContentProvider" - perdono i loro dati per tutte e 20 le app. – CommonsWare