2014-12-31 22 views
5

Sto sviluppando un'applicazione, e in questa attività viene premuto un pulsante e qualsiasi file può essere selezionato per essere caricato. Il selettore file viene caricato correttamente, ma tutte le immagini non sono selezionabili (in grigio). Ho aggiunto il permesso READ_EXTERNAL_STORAGE al file Manifest, ma non ho idea del motivo per cui non mi permetterà ancora di scegliere un file. Ecco il codice che sto utilizzandoI file non selezionabili dopo aver chiamato ACTION_GET_CONTENT Intenzione

private Button uploadButton; 
private TextView uploadFile; 
private static final int PICKFILE_RESULT_CODE = 1; 
private String selectedImagePath; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    uploadButton = (Button)findViewById(R.id.upload_button); 
    uploadFile = (TextView)findViewById(R.id.uploadFile); 

    uploadButton.setOnClickListener(new View.OnClickListener() 
    { 

     public void onClick(View v){ 

      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
       intent.setType("file/*"); 
      startActivityForResult(intent, PICKFILE_RESULT_CODE); 
    }}); 
    } 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch(requestCode){ 
    case PICKFILE_RESULT_CODE: 
     if (resultCode==RESULT_OK){ 
      String FilePath = data.getData().getPath(); 
      uploadFile.setText(FilePath); 
     } 
     break; 
    } 
} 
+9

forse non ci sono file di tipo ' "file/*"' avete provato ' "*/*"' – Blundell

+1

@Blundell intent.setType ("\ */\ *") ha funzionato per me e i file non sono più visualizzati in grigio. –

risposta

4

Blundell lo ha menzionato nel commento sopra, ma è anche possibile aggiungere il sotto al file manifest. Inoltre, provare a utilizzare setType ("image/*).

<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 
+0

La raccomandazione di Blundell ha funzionato, grazie per l'aiuto! –

+0

@Blundell affronterò lo stesso problema. ma qui leggo il file sqlite database (.mdb). e anche io ho impostato il permesso di lettura nel file manifest, non riesco a selezionarlo. ma il mobile Android con api level-9 funziona bene (in grado di selezionare). così posso sapere cosa c'è di sbagliato in api level> 9 .. – Haji

+0

questa soluzione non ha funzionato per me. –

8

provare a impostare il tipo di "*/* come suggerito da Blundell.

Se non si desidera che l'utente sia in grado di selezionare il contenuto di qualsiasi tipo si dovrebbe registrare il tipo di file in onActivityResult (this answer mostra come). Quindi provare un paio di file validi, visualizzare il registro e modificare intent.setType di conseguenza. È possibile utilizzare più tipi su KitKat e, soprattutto, come descritto in this answer.

2

Quando ho provato con marshmellow e sopra il merluzzo sottostante e aiutato. Ho provato con C# (xamarin). Il tipo mime multiplo è la chiave. Spero che questo aiuta qualcuno

Intent intent = new Intent(Intent.ActionOpenDocument); 
      intent.SetType("file/*"); 
      intent.AddCategory(Intent.CategoryOpenable); 
      String[] mimeTypes = { "text/csv", "text/comma-separated-values" ,"application/pdf","image/*"}; 
      intent.PutExtra(Intent.ExtraMimeTypes, mimeTypes); 
      ((FormsAppCompatActivity)Forms.Context).StartActivityForResult(intent, 7007); 
+1

Adesso non riesco a trovare la minuscola/maiuscola. Ma come prima cosa intendi.SetType ("file/*"); e quindi intent.SetType ("*/*"); La seconda chiamata sovrascrive la prima che non è necessaria. – lukassos

+0

@lukassos errore mio grazie per aver corretto .. –

+1

+1 grazie :) btw Ho usato la tua soluzione in quanto è la più semplice da sopra – lukassos

Problemi correlati