2013-07-19 14 views
10

Con FLAG_GRANT_READ_URI_PERMISSION negli intenti che passava a startActivity, si può concedere il permesso Uri Se l'URI è impostato utilizzando setData. Ma se lo viene inserito in EXTRA_STREAM, lo Uri non viene concesso prima di jeallybean.Concessione uri permesso di uri in EXTRA_STREAM negli intenti

So che possiamo usare grantUriPermission seguito da uno revokeUriPermission per annullare l'autorizzazione concessa. Ma sembra che non ci sia un buon posto per eseguire revokeUriPermission.

Esiste una soluzione migliore? O qualche suggerimento da mettere revokeUriPermission? Grazie in anticipo.

Link correlati: How to grant temporary access to custom content provider using FLAG_GRANT_READ_URI_PERMISSION

+0

Hai mai trovato una risposta a questa domanda? Ho lo stesso problema nel tentativo di concedere l'autorizzazione di lettura uri ai dati in EXTRA_STREAM – StuStirling

+0

Correggimi se ho torto. Stai provando a passare un Uri (file di puntamento nel filesystem privato) a un'altra app installata sul dispositivo. È possibile accedere a Uri tramite ContentProvider. –

+0

Si prega di inviare il manifest e la parte del codice in cui si crea Intent e avviare l'attività. –

risposta

2

ho fatto qualche lettura su di esso. Innanzitutto, EXTRA_STREAM non utilizza FLAG_GRANT_READ_URI_PERMISSION. Funziona a partire da JellyBean solo perché sotto il cofano, chiamando startActivity() copie EXTRA_STREAM a ClipData, che è impostato per Intento e utilizza FLAG_GRANT_READ_URI_PERMISSION.

Per quanto riguarda la domanda in cui deve essere chiamato revokeUriPermission().

suggerisco di usare:

private static final int REQUEST_CODE = 1; 
startActivityForResult(intent, REQUEST_CODE); 

invece di

startActivity(intent); 

e quindi sovrascrivere il seguente metodo:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request we're responding to 
    if (requestCode == REQUEST_CODE) { 
     // Call revokeUriPermission here 

    } 
} 

Sopra metodo sarà chiamato quando ha iniziato le uscite di attività. Dai un'occhiata alla documentazione here

+1

Il mio requisito è fornire un allegato all'app Email utilizzando il provider di contenuti che ha esportato il flag impostato su false. La prima attività avviata dall'intenzione delle e-mail è l'attività di scelta e per startActivityForResult non mi restituirà la fine dell'attività di posta elettronica, ma mi darà la fine di ChooserActivity. Pertanto, se in quel momento le autorizzazioni vengono revocate, l'app email non leggerà l'allegato. – AndRSoid

+0

Stai chiamando ChooserActivity in modo esplicito? Se sì, allora forse prova senza. Se si vuole essere sicuri che vengano mostrate solo le app di posta elettronica, chiamare questo intent.setData (Uri.parse ("mailto:")) ;. Se no, allora forse per il tuo provider sarà sufficiente. Permette di specificare i file a cui è possibile accedere tramite ContentProvider (funziona con regex). Se ancora non va bene fai una domanda a parte, incolla il tuo codice e fammi sapere. Capirò qualcosa. Pollice su! –