Ho 2 apps - Demo e Pro. Demo ha un fornitore di contenuti e quando Pro è installato, ha bisogno di trasferire tutti i file dal provider demo.la concessione di autorizzazioni per URI FileProvider dà SecurityException
Demo app (provider):
<provider
android:name="***.provider.InternalStorageProvider"
android:authorities="***.demo.storage.int.provider"
android:exported="false"
android:syncable="true"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/int_storage_paths" />
</provider>
Pro app (consumatori):
Esperimento 1:
ParcelFileDescriptor PFD = cr.openFileDescriptor (exposedFileUri, "r");
Input FileInputStream = nuovo FileInputStream (pfd.getFileDescriptor());
java.lang.SecurityException: Autorizzazione Denial: fornitore di apertura .provider.InternalStorageProvider da ProcessRecord {9c85875 10734:/u0a61} (pid = 10734, uid = 10061), che non è esportato da uid 10062
Esperimento 2:
Attività attività = getActivity(); activity.grantUriPermission (activity.getPackageName(), exposedFileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
ParcelFileDescriptor pfd = cr.openFileDescriptor (exposedFileUri, "r"); Input FileInputStream = nuovo FileInputStream (pfd.getFileDescriptor());
java.lang.SecurityException: Uid 10061 non ha l'autorizzazione per Uri 0 @ contenuti: //***.demo.storage.int.provider/db/file1
InternalStorageProvider
è una copia di un normale FileProvider
. Ma non importa in quanto l'esecuzione non può nemmeno raggiungerlo. Le eccezioni vengono lanciate prima di essere chiamate. Nota che non sono coinvolte attività e intenzioni del selettore. Il consumatore prova ad aprire il file direttamente da un uri conosciuto, senza selettori. La maggior parte degli esempi che ho trovato utilizzano Intent.FLAG_GRANT_READ_URI_PERMISSION
ma non utilizzo affatto un intento.
Come si suppone di concedere correttamente le autorizzazioni uri al consumatore?
esecuzione su questo tema in questo momento, per caso sono stati in grado di risolverlo? –
Era molto tempo fa, ricordo a malapena qualcosa. Questa roba è davvero malvagia. – WindRider
Risolto il problema passando "FLAG_GRANT_READ_URI_PERMISSION" a qualsiasi altro intento che faceva uso dell'URI nella mia app –