6

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?

+0

esecuzione su questo tema in questo momento, per caso sono stati in grado di risolverlo? –

+0

Era molto tempo fa, ricordo a malapena qualcosa. Questa roba è davvero malvagia. – WindRider

+0

Risolto il problema passando "FLAG_GRANT_READ_URI_PERMISSION" a qualsiasi altro intento che faceva uso dell'URI nella mia app –

risposta

1

È necessario dare il permesso di pro app ...

activity.grantUriPermission("pro app package name", exposedFileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);