Autore Topic: Aprire path sdcard per selezionare un file  (Letto 1556 volte)

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Aprire path sdcard per selezionare un file
« il: 29 Marzo 2012, 00:39:52 CEST »
0
Dopo aver sbattuto la testa per un paio d'ore sono a chiedervi un suggerimento come da titolo.
Praticamente sono riuscito sia ad aprire il path della galleria per selezionare un'immagine, che ad aprire un path ftp mostrarne la lista dei file e scaricarli con onclick ma non riesco, e in rete non ho trovato ne certezze ne chiarezze, a selezionare un path dall'sdcard per mostrarne poi il contenuto in una listview. Lo scopo in pratica è aggiungere la funzione upload alla struttra ftp che sto creando; vorrei quindi selezionare un file presente in un percorso specifico o anche assoluto (per farlo poi navigare) dell'sdcard e con una startActivityForResult andarmi ad aprire un path in ftp (come ho già ho fatto per il download) per fare poi l'upload del file nella cartella in remoto desiderata.

Al di là comunque della motivazione quello che non riesco a fare è proprio aprire la lista dei file presenti in un path nella sdcard del telefono.

Ho provato ad esempio con:

Codice (Java): [Seleziona]
startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse("file:///sdcard/")), 2);
Ma ottengo l'errore:

Codice: [Seleziona]
03-29 00:17:17.270: ERROR/AndroidRuntime(16649): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///sdcard/ }

O anche con:

Codice (Java): [Seleziona]
startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath() + "/")), 2);
Ma ottengo lo stesso errore:

Codice: [Seleziona]
03-29 00:35:42.755: ERROR/AndroidRuntime(17252): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///mnt/sdcard/ }

Anche con "file://" o solo il percorso dell'sdcard.

Avete suggerimenti, pls?  :-X

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:Aprire path sdcard per selezionare un file
« Risposta #1 il: 29 Marzo 2012, 01:18:20 CEST »
0
Da quel che ho letto in giro non esiste un programma 'di serie' che faccia da file manager. Se non erro hai usato la tecnica che fa partire l'applicazione di default per il tipo di protocollo indicato ma  in questo caso l'applicazione di default non esiste. Devi farti tu qualche cosa (c'è uno snippet qui sul forum al riguardo se non ricordo male)
Odio l'inglese e per un informatico non è il massimo

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:Aprire path sdcard per selezionare un file
« Risposta #2 il: 05 Aprile 2012, 00:57:26 CEST »
0
Infatti anche dalle mie ricerche non è emerso niente di più immediato, tuttavia dopo vari tentativi sono riuscito a listare la cartella desiderata della mia sdcard dalla quale riesco ad aprire le altre cartelle in essa contenute e listarne i contenuti. Sembrerebbe quindi fatta ma in realtà ho trovato un altro scoglio che leggendo in rete sembrerebbe non così insolito ma per il quale non ho trovato uan soluzione efficace.

In pratica l'intento è quello di sfogliare le cartelle per selezionare un file e farne l'upload in ftp ed al di là della finalità il blocco ce l'ho proprio al momento della selezione del file dove se il file selezionato è una cartella questa viene aperta e viene mostrato il contenuto se invece ad essere selezionato è un file vorrei fargli fare un'altra cosa e invece ricevo un eccezione dovuta al fatto che non mi viene trattato come un file bensì come se fosse una cartella e pertanto il "listFiles()" non può funzionare.

Ho pertanto tentato di identificare i file e le cartelle con i metodi isFile() e isDirectory() ma in entrambi i casi ricevo lo stesso risultato sia che selezioni un file che una cartella (solo che se è una cartella me la apre). Ho pensato che potesse essere il percorso ma con dei Log ho controllato e non è quello il problema, sembra come se i due metodi non funzionassero come richiesto.

L'errore sul LogCat è intuibile:

Codice: [Seleziona]
04-05 00:47:00.800: ERROR/AndroidRuntime(28698): Caused by: java.lang.NullPointerException
04-05 00:47:00.800: ERROR/AndroidRuntime(28698):     at it.sitomio.mioprogetto.DirectoryBrowser.getFiles(DirectoryBrowser.java:87)
04-05 00:47:00.800: ERROR/AndroidRuntime(28698):     at it.sitomio.mioprogetto.DirectoryBrowser.onCreate(DirectoryBrowser.java:43)

E a quelle righe c'è la chiamata:

Codice (Java): [Seleziona]
getFiles(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + APP_PATH_SDCARD_TO_UPLOAD).listFiles());
che per le cartelle va bene ma non per i file.

Il punto dove DOVREBBE distinguere tra file e cartella nel momento in cui faccio click su un elemento della lista è il seguente:

Codice (Java): [Seleziona]
        File file = new File(items.get(selectedRow));
        //Toast.makeText(this, file + "", Toast.LENGTH_SHORT).show();
        boolean isFile = file.isFile();
        //Toast.makeText(this, isFile + "", Toast.LENGTH_SHORT).show();
        if(!isFile){
            //Log.e("log_tag", "sono passato di qua");
           
                Intent i = new Intent(getApplicationContext(), DirectoryBrowser.class);
            i.putExtra(pkg + ".pathfolder", APP_PATH_SDCARD_TO_UPLOAD + file + "/");
                startActivity(i);
            //L'intent fa ripartire l'activity dove viene richiamato il metodo getFiles visto nel codice riportato sopra
        }else{
         //NON FARE NIENTE
}

Il primo Toast (senza commenti ovviamente) fa mostrare l'elemento selezionato mentre il secondo mostra "false" quando seleziono una cartella, se seleziono un file crasha per cui non vedo niente ma dal comportamento direi che mostrerebbe lo stesso "false" dato passa da dove ho messo il Log.

Ci sto sbattendo la testa da un po', ci sono vie alternative o c'è qualcosa che mi sfugge o che non considero?
« Ultima modifica: 05 Aprile 2012, 00:59:15 CEST da Androi-dé! »