5

Con l'app Google Foto, sto provando a selezionare un video, che non è memorizzato nella cache del dispositivo.Come ottenere video (non locali) dall'app Google Foto

Sto utilizzando l'intento ACTION_GET_CONTENT per avviare la finestra di dialogo delle opzioni e da lì ho scelto l'app Google Foto.

Durante la selezione di video locali, restituisce un Uri in questo modulo.

contenuti: // multimediale/esterno/video/media/6708

E questo, mi interrogano il fornitore di contenuti per recuperare la posizione del file vero e proprio, e procedere da lì. La posizione del file è simile a questa.

/stoccaggio/emulato/0/WhatsApp/Media/WhatsApp Video/VID-20.131.102-WA0000.mp4

Ora, quando scelgo un video online, vale a dire: un video non disponibile su il mio dispositivo ancora, e che deve essere scaricato da utilizzare, l'Uri tornato assomiglia a questo:

contenuti: //com.google.android.apps.photos.content/1/ https://lh6.googleusercontent.com/_RD-QTO_SK5jlaPldTe2n5GANqMc3h-ukcbNoFlF1NLy=s0-d

Ora, con questo, non c'è ContentProvider documentato che possa aiutarmi a ottenere il link effettivo a questo video. Anche se faccio una query, non restituisce nulla a parte le colonne DISPLAY_NAME e SIZE.

DISPLAY_NAME contiene video.mpeg (nome visualizzato lo stesso per i diversi video)

TAGLIA probabilmente mi dice la dimensione del file effettivo.

Referred to this post on SO.

ho controllato vari post, e ho pensato che avrei dovuto ottenere un InputStream per il video attraverso il fornitore di contenuti, salvare il file, e lavorare con il file. Scegliere un file immagine funziona comunque, ma con il video no.

Quindi, per copiare lo stream su un file, ho questo codice.

 
InputStream inputStream = context.getContentResolver().openInputStream(Uri.parse(path)); 

E infine scrivere in un file temporaneo. Il file viene creato, ma non sembra essere formattato correttamente. VLC riproduce il file, ma mostra solo il primo fotogramma in tutto.

Se prendo l'URL dall'ultima parte dell'URI di cui sopra, e provo a visualizzarlo su un browser, scarica un file GIF. Sto indovinando che è il problema. Ma non so come ottenere il formato mpeg del video.

Chiunque ha vissuto lo stesso?

risposta

5

Finalmente trovato la soluzione al problema. Questo funzionerebbe sia per le immagini che per i video.

fa riferimento questo video:

DevBytes: Android 4.4 bagagli Accesso Framework: client

https://www.youtube.com/watch?v=UFj9AEz0DHQ

 
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("image/*"); 
startActivity(intent); 

Prendi l'Uri, e l'accesso e salvare il file in questo modo:

 
ParcelFileDescriptor parcelFileDescriptor = context.getContentResolver() 
       .openFileDescriptor(Uri.parse(path),"r"); 

FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 

InputStream inputStream = new FileInputStream(fileDescriptor); 

BufferedInputStream reader = new BufferedInputStream(inputStream); 

// Create an output stream to a file that you want to save to 
BufferedOutputStream outStream = new BufferedOutputStream(
        new FileOutputStream(filePath)); 
byte[] buf = new byte[2048]; 
int len; 
while ((len = reader.read(buf)) > 0) { 
    outStream.write(buf, 0, len); 
} 

Per qualche motivo, ottenere un flusso di input senza utilizzare ParcelFileDescriptor non funziona.

+0

Massive grazie per questo, questo ha aiutato molto! Ecco una domanda correlata e risposta accettata: http://stackoverflow.com/q/30572261/3309883 –

Problemi correlati