2016-03-23 15 views
11

Ho difficoltà a capire la differenza tra ACTION_OPEN_DOCUMENT e ACTION_GET_CONTENT intent quando vengono utilizzati per aprire un documento aperto. Se sto supportando Andriod prima di KitKat, che non supporta ACTION_OPEN_DOCUMENT, dovrei semplicemente accontentarmi di ACTION_GET_CONTENT?Qual è la vera differenza tra ACTION_GET_CONTENT e ACTION_OPEN_DOCUMENT?

Il documentation dice questo:

ACTION_OPEN_DOCUMENT non è destinato ad essere un sostituto per ACTION_GET_CONTENT. Quello che si dovrebbe usare dipende dalle esigenze del vostra applicazione:

  • Usa ACTION_GET_CONTENT se si desidera la vostra applicazione ai dati lettura/import semplicemente. Con questo approccio, l'app importa una copia dei dati, ad esempio un file immagine.
  • Utilizzare ACTION_OPEN_DOCUMENT se si desidera che l'app abbia accesso a lungo termine a ai documenti di proprietà di un fornitore di documento . Un esempio potrebbe essere un'app di fotoritocco che consente agli utenti di modificare le immagini memorizzate in un fornitore di documenti.

non Vuol ACTION_GET_CONTENT utilizzare anche i fornitori di documenti in KitKat? Cosa mi impedirebbe di avere "accesso a lungo termine e persistente" e cosa significa esattamente?

Fondamentalmente, qual è la differenza tra i seguenti due snippet?

ACTION_GET_CONTENT

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("*/*"); 

ACTION_OPEN_DOCUMENT

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
intent.setType("*/*"); 

risposta

13

non Vuol ACTION_GET_CONTENT utilizzare anche i fornitori di documenti in KitKat?

Non necessariamente. Ciò dipende dall'implementazione dell'app che pubblica il contenuto. Si noti inoltre che DocumentProvider è un tipo specifico di ContentProvider.

Ciò che mi avrebbe impedito di avere "a lungo termine, l'accesso permanente"

Il Uri che si torna da ACTION_GET_CONTENT può avere una borsa di permesso temporaneo con esso per la vostra applicazione, per essere in grado di leggere e/o scrivere il contenuto. Tale sovvenzione decadrà alla fine (ad esempio, quando il processo termina). Ad esempio, salvare Uri come stringa in un database può essere inutile.

Parte dello Storage Access Framework include il concetto che un fornitore di contenuti può offrire concessioni di permesso che possono durare per un periodo prolungato ("a lungo termine, persistente").Anche se non c'è nulla che impedisca a un'app di offrire permessi così persistenti con ACTION_GET_CONTENT al livello API 19+, saranno più comuni con ACTION_OPEN_DOCUMENT.

Fondamentalmente, qual è la differenza tra i seguenti due frammenti?

L'esperienza utente sarà un po 'diversa, come ACTION_OPEN_DOCUMENT fornisce un'interfaccia file explorer stile standardizzato, mentre ACTION_GET_CONTENT è una finestra di dialogo di selezione tradizionali, seguiti da alcuni specifici-app UI.

Dal tuo punto di vista come consumatore di questo contenuto, ACTION_GET_CONTENT è se si desidera utilizzare il contenuto ora; ACTION_OPEN_DOCUMENT è se si desidera utilizzare il contenuto ora e in seguito.

+1

Nella mia esperienza, non c'è mai un dialogo di scelta. Le due azioni risultano nella stessa interfaccia utente a schermo intero. È come un esploratore di file, ma puoi anche scegliere di estrarre un cassetto a sinistra pieno di icone di app. L'unica differenza quando si utilizza ogni azione è questa lista di app a sinistra. Quando passo i tipi MIME delle immagini, GET_CONTENT mi consente di esplorare non solo le mie cartelle come i download, ma ha anche una voce in una diapositiva nel cassetto sinistro per Google Foto, Dropbox, ecc. Se utilizzo OPEN_DOCUMENT, ottengo la stessa identica interfaccia utente, semplicemente non ci sono app nel cassetto di sinistra che vogliono servirmi contenuti diversi da Google Drive. – Stephen

+2

@Stephen: "non c'è mai una finestra di dialogo selettore" - "ACTION_GET_CONTENT" ne avrà una su Android 4.3 e precedenti. "L'unica differenza quando si utilizza ogni azione è questa lista di app a sinistra" - alcune app supportano una delle azioni, altre supportano l'altra. Idealmente, un'app come Dropbox supporterà 'ACTION_OPEN_DOCUMENT' su Android 4.4+, tornando a supportare 'ACTION_GET_CONTENT' su Android 4.3 e versioni precedenti. – CommonsWare

+0

Ho appena installato la mia applicazione su un dispositivo 4.3 e tu hai ragione! Un "raccoglitore" è apparso piuttosto che l'interfaccia di tipo "File Explorer". Grazie per l'aiuto! A proposito, ama i tuoi libri. Sono stato iscritto per anni. – Stephen

Problemi correlati