2009-12-07 13 views
9

Così sto cercando di consentire all'utente di scegliere un particolare pezzo di media con il mio Applicazione Android utilizzando il metodo descritto qui: Access pictures from Pictures app in my android appAccesso ai video e foto su Android 1.5 +

E le grandi opere, ad eccezione del Infatti, a quanto pare, posso solo scegliere tra Video o Foto per presentare l'utente, non entrambi allo stesso tempo. C'è un buon modo per farlo con:

startSubActivity (nuova Intent (Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);

Grazie!

+0

Per aggiungere la beffa al danno - quando si utilizza il metodo con Video - non sarà effettivamente consentire all'utente di scegliere i mezzi di comunicazione - semplicemente gioca quando selezionarlo - e non mostrerà le miniature. Sto per riscrivere la Gallery? C'è un modo per richiamare Gallery e poi restituire l'Uri per un pezzo di media selezionato ??? – FunnyLookinHat

risposta

17

L'ho usato più volte. Il modo migliore è qualcosa di simile:

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT); 
//comma-separated MIME types 
mediaChooser.setType("video/*, images/*"); 
startActivityForResult(mediaChooser, 1); 

Anche se questo non è perfettamente preciso, ha funzionato bene in tutto quello che ho usato in Si aprirà un'attività Gallery-esque con un elenco di miniature. ogni immagine/video nella galleria dell'utente. L'intento restituito a onActivityResult() ha un extra denominato "DATA" che sarà un contenuto: // URI sul supporto selezionato.

EDIT: oops, per ottenere l'URI per il supporto selezionato si vuole realmente chiamare getData() sul Intento che viene passato a onActivityResult()

+2

Robert - Per qualche ragione ogni volta che utilizzo la riga seguente, viene visualizzato un selettore vuoto: mediaChooser.setType ("video/*, images/*"); Ho provato anche questo senza fortuna ... mediaChooser.setType ("video/*, image/*"); Tuttavia, ognuno individualmente funziona bene ... cioè mediaChooser.setType ("video/*"); mediaChooser.setType ("image/*"); Potresti incollare uno snippet di codice esatto che funziona? **** EDIT - Sembra che questo non funzioni più post versione 2.0 – FunnyLookinHat

+3

Ciao! Sto usando Android 1.6 e NON funziona! Solo l'immagine o solo i video sono a posto. Qualche idea? – Karoly

+1

Non funziona su 2.3 –

1

Kivy - Il modo più semplice è quello di creare un intento per selezionare una parte di supporto e limitare in video:

Intent pickMedia = new Intent(Intent.ACTION_GET_CONTENT); 
pickMedia.setType("video/*"); 
startActivityForResult(pickMedia,12345); 

Nota - 12345 è il numero intero che la vostra applicazione ha bisogno di ascoltare per una richiesta di richiamata in modo che sia possibile inviare qualunque tipo di informazione riceve ovunque è necessario.

È quindi necessario avere, inoltre, che stessa attività di ascolto per le informazioni da inviare indietro da quella intento:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 12345) { 
      if (resultCode == Activity.RESULT_OK) { 
       Uri selectedVideoLocation = data.getData(); 

       // Do something with the data... 
      } 

     } 
    } 

Cool?

+1

La domanda riguardava l'accesso a video e foto, non solo video. La risposta che hai dato riguarda solo il video. –

+0

Purtroppo non è possibile farlo in Android 2.0+: il metodo falso di mediaChooser.setType ("video/*, images/*"); non funzionerà e, a meno che non si crei la propria attività di selezione che esegue la scansione dei supporti e la si ritorni a una schermata di selezione, il meglio che si ottiene è di consentire all'utente di scegliere tra un'immagine di video. – FunnyLookinHat

+0

Non so cosa hanno fatto in 4.2.x, ma scegliere più tipi di mime sembra funzionare bene :) –

1
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(intent, 1); 
1

Prova questa

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 
startActivityForResult(intent, 101); 
Problemi correlati