Autore Topic: Metodo per far selezionare un file all'utente  (Letto 966 volte)

Offline acquariusoft

  • Utente normale
  • ***
  • Post: 157
  • Respect: +2
    • Mostra profilo
    • Visita il mio blog
  • Dispositivo Android:
    Galaxy ace, Asus eee transformer
  • Play Store ID:
    acquariusoft
  • Sistema operativo:
    Windows 7
Metodo per far selezionare un file all'utente
« il: 18 Novembre 2011, 09:19:38 CET »
0
Salve ragazzi,

vorrei dare all'utente la possibilità di selezionare un file dalla mia applicazione, senza fargli installare nessun'applicazione esterna, ma utilizzando il file manager preimpostato dall'utente.
Ho cercato in rete ma non sembra fattibile, anceh se mi sembra molto strano.
Avete qualche suggerimento?

Ciao!!

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Metodo per far selezionare un file all'utente
« Risposta #1 il: 18 Novembre 2011, 17:49:58 CET »
0
Scusa puoi spiegarti meglio? Sarà il venerdi ma io mica ho capito
La domanda stupida è quella che non si fa

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:Metodo per far selezionare un file all'utente
« Risposta #2 il: 20 Gennaio 2012, 16:16:48 CET »
0
ho bisogno di creare un button che faccia apparire una dialog che permetta all'utente di selezionare il file che intende utilizzare, o almeno che ne prelevi il path

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Metodo per far selezionare un file all'utente
« Risposta #3 il: 20 Gennaio 2012, 19:43:03 CET »
0
Ciao, devi usare l'ACTION_GET_CONTENT Intent | Android Developers:
 e poi fare un intent.setType() passando come paramentro una stringa adeguata. Nella documetazione che ti ho linkato c'è scritto, come esempio:
Citazione
(such as image/* or */*)
.

Poi fai  un startActivityForResult() e nell'onActivityResult trovi il path con data.getData().getPath(), dove data è l'intent che ti viene ritornato.      ;-)

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:Metodo per far selezionare un file all'utente
« Risposta #4 il: 20 Gennaio 2012, 21:26:47 CET »
0
grazie per l'aiuto ma nella dialog non mi viene data nessuna opzione per la selezione di semplici file di testo... qualche suggerimento?

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Metodo per far selezionare un file all'utente
« Risposta #5 il: 20 Gennaio 2012, 21:40:57 CET »
0
Il dialog elenca le applicazioni tramite le quali è possibile selezionare un file del tipo eventualmente richiesto tramite il setType() dell'intent, non va ad elencare direttamente i file.
Credo tu debba usare il setType con un parametro appropriato in modo da dire all'applicazione esterna di visualizzare solo i file di testo, anche se non penso che tutte le applicazioni registrate con quell'intent filter poi vadano a filtrare il contenuto in base al parametro passato nel setType.

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:Metodo per far selezionare un file all'utente
« Risposta #6 il: 20 Gennaio 2012, 21:44:47 CET »
0
si ho capito quello che intendi... purtroppo però devo consentire all'utente la selezione del file direttamente dalla mia app in quanto non posso sapere anticipatamente se nel dispositivo sia installata un file manager... comunque ho trovato una soluzione...
non faccio altro che creare una listView e popolarla tramite

Codice: [Seleziona]
File sd = Environment.getExternalStorageDirectory();
        String[] fileNameSD = sd.list();

quindi con una startActivityForResult avvio la nuova activity con la lista, ma.... come faccio a passarmi la stringa selezionata????

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Metodo per far selezionare un file all'utente
« Risposta #7 il: 20 Gennaio 2012, 21:59:22 CET »
0
Citazione
e nell'onActivityResult trovi il path con data.getData().getPath(), dove data è l'intent che ti viene ritornato. 
  :D

Comunque la tua è l'altra alternativa utilizzabile (che non utilizza il file browser prescelto dall'utente di cui parlavi nel primo post), pvviamente da completare perché in quel modo elenchi tutti i file e directory presenti nella root directory della scheda sd.

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:Metodo per far selezionare un file all'utente
« Risposta #8 il: 20 Gennaio 2012, 22:02:59 CET »
0
Citazione
pvviamente da completare perché in quel modo elenchi tutti i file e directory presenti nella root directory della scheda sd.

è vero ma non sono riuscito a filtrare i risultati quindi per il momento faccio fare un piccolo sforzo all'utente  ;-)

grazie ancora, veramente gentilissimo

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Metodo per far selezionare un file all'utente
« Risposta #9 il: 20 Gennaio 2012, 22:13:25 CET »
0
Se vuoi l'elenco di tutti i file di testo presenti solo nella root directory della scheda sd potresti creare un FileFilter con le estensioni dei file che ti interessano. Poi usi il metodo File.listFiles(FileFilter filter), al quale passi il filtro che hai creato.  :)

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:Metodo per far selezionare un file all'utente
« Risposta #10 il: 20 Gennaio 2012, 22:15:49 CET »
0
ti chiedo l'ultima cortesia e poi non ti rompo più  :-X
ho capito che devo usare getData(), ma nell'activity della list dove metto il paramentro che devo passare???
scusami tanto se stresso ma sono giorni che combatto con queste cosette

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Metodo per far selezionare un file all'utente
« Risposta #11 il: 20 Gennaio 2012, 22:32:05 CET »
0
Figurati, non mi stressi mica.  :D (Tra l'altro mi sono accorto solo ora che non sei la stessa persona che ha iniziato il  thread)
Alla fine ora sono io in confusione. Vuoi utilizzare lo startActivityForResult() oppure il File.listFiles()?  ;-)

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:Metodo per far selezionare un file all'utente
« Risposta #12 il: 20 Gennaio 2012, 22:35:50 CET »
0
Citazione
Vuoi utilizzare lo startActivityForResult() oppure il File.listFiles()?

per favore non mettermi cose nuove in testa  8-)

ormai sto usando startActivityForResult(), solo che quando faccio data.getData() mi esce l'eccezione per appunto data punta a null...
quando seleziono il file, dove lo metto questo per averlo nell'activity precedente?

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Metodo per far selezionare un file all'utente
« Risposta #13 il: 20 Gennaio 2012, 22:38:29 CET »
0
Posta il codice così vediamo se c'è qualche errore.  ;-)

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:Metodo per far selezionare un file all'utente
« Risposta #14 il: 20 Gennaio 2012, 22:43:04 CET »
0
Codice (Java): [Seleziona]
                periodoButton.setOnClickListener(new OnClickListener(){
                        @Override
                        public void onClick(View v) {
                                intent = new Intent(DbLoadFile.this, DbLoadFileList.class);
                                startActivityForResult(intent, 0);
                        }
                });
               
                settingButton = (Button)findViewById(R.id.button_LoadSetting);
                settingButton.setOnClickListener(new OnClickListener(){
                        @Override
                        public void onClick(View v) {
                                intent = new Intent(DbLoadFile.this, DbLoadFileList.class);
                                startActivityForResult(intent, 1);
                        }
                });
               
                materieButton = (Button)findViewById(R.id.button_LoadMaterie);
                materieButton.setOnClickListener(new OnClickListener(){
                        @Override
                        public void onClick(View v) {
                                intent = new Intent(DbLoadFile.this, DbLoadFileList.class);
                                startActivityForResult(intent, 2);
                        }
                });
               
                classiButton = (Button)findViewById(R.id.button_LoadClassi);
                classiButton.setOnClickListener(new OnClickListener(){
                        @Override
                        public void onClick(View v) {
                                intent = new Intent(DbLoadFile.this, DbLoadFileList.class);
                                startActivityForResult(intent, 3);
                        }
                });
               
                studentiButton = (Button)findViewById(R.id.button_LoadStudenti);
                studentiButton.setOnClickListener(new OnClickListener(){
                        @Override
                        public void onClick(View v) {
                                intent = new Intent(DbLoadFile.this, DbLoadFileList.class);
                                startActivityForResult(intent, 4);
                        }
                });
               
                orarioButton = (Button)findViewById(R.id.button_LoadOrario);
                orarioButton.setOnClickListener(new OnClickListener(){
                        @Override
                        public void onClick(View v) {
                                intent = new Intent(DbLoadFile.this, DbLoadFileList.class);
                                startActivityForResult(intent, 5);
                        }
                });
        }
       
        protected void onActivityResult(int requestCode, int resultCode, Intent data){
                if(requestCode == 0){
                        periodoTextView = (TextView)findViewById(R.id.textView_loadPeriodi);
                        periodoTextView.setText(data.getData().getPath());
                }
                if(requestCode == 1){
                        settingTextView = (TextView)findViewById(R.id.textView_loadSetting);
                }
                if(requestCode == 2){
                        materieTextView = (TextView)findViewById(R.id.textView_loadMaterie);
                }
                if(requestCode == 3){
                        classiTextView = (TextView)findViewById(R.id.textView_loadClassi);
                }
                if(requestCode == 4){
                        studentiTextView = (TextView)findViewById(R.id.textView_loadStudenti);
                }
                if(requestCode == 5){
                        orarioTextView = (TextView)findViewById(R.id.textView_loadOrario);
                }
               
        }

e qui c'è l'activity chiamata

Codice (Java): [Seleziona]
                listViewFiles = (ListView)findViewById(R.id.loadFileListDB);
                File sd = Environment.getExternalStorageDirectory();
                FilenameFilter fFilter = new FilenameFilter(){
                        @Override
                        public boolean accept(File dir, String filename) {
                                if(filename.contains(".txt"))
                                        return true;
                                else
                                        return false;
                        }
                };
               
        String[] fileNameSD = sd.list(fFilter);
        ArrayAdapter<String> filesAdapter = new ArrayAdapter<String>(this, R.layout.row_layout_options, R.id.textView_row, fileNameSD);
        listViewFiles.setAdapter(filesAdapter);
        listViewFiles.setOnItemClickListener(new OnItemClickListener(){

                        @Override
                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
                                setResult(0);
                                finish();
                        }
               
        });
       
        }
« Ultima modifica: 20 Gennaio 2012, 23:15:13 CET da yoshi »