2015-10-14 2 views
2

Я загружаю выбранный файл на сервер, но я знаю, что хочу запретить пользователю выбирать только файл документа (.doc, .pdf и т. Д.) И файл изображения.Как выбрать несколько типов файлов с помощью намерения в Android?

На данный момент мой код работает для всех файлов, которые он извлекает uri из всех файлов. Поэтому, пожалуйста, расскажите мне, как ограничить пользователя выбором только определенного типа файла.

Вот мой код, чтобы выбрать любой файл.

Intent i=new Intent(); 
       i.setType("*/*"); 
       i.setAction(Intent.ACTION_GET_CONTENT); 
       i.addCategory(Intent.CATEGORY_OPENABLE); 
       startActivityForResult(Intent.createChooser(i, "abc"),requestCode); 
+0

https://androidproblem.wordpress.com/2012/01/18/pick-a-file-using-intent-action_get_conten t/ –

ответ

13

Пасс несколько типов MIME разделить с | как

i.setType("image/*|application/pdf|audio/*"); 

или создать массив типов MIME, как

String[] mimetypes = {"image/*", "application/*|text/*"}; 

и передать его в качестве

i.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); 
+0

Как получить путь к выбранному файлу (pdf, текст) – TheGreat004

+0

@ TheGreat004 Проверьте [здесь] (http://stackoverflow.com/a/9989900/4596556). –

+1

hi mate, я попытался выбрать документ или файл типа docx, но uable, чтобы выбрать его, мой тип намерения следующий, intent.setType («image/* | application/pdf | application/doc | application/docm | application/docx | application/dot | application/mcw | application/rtf "+ " | application/pages | application/odt | application/ott "); – TheGreat004

1

Хотя не через намерение, но я нашел хороший проект библиотеки droidninja, который позволяет просматривать файлы документов или изображения, хранящиеся локально за один раз.

repositories { 
    jcenter() 
    maven { 
     url "https://jitpack.io" 
    } 
} 

Вставьте это в app.gradle файла

compile 'com.droidninja:filepicker:1.0.6' 

затем называем это ниже заданной функцией, чтобы иметь материальное тематическое диалоговое окно, которое даст один вариант выбрать, следует ли выбрать изображения или группа, или же с Документами

private void showFileChooser() { 

    new MaterialStyledDialog.Builder(getActivity()) 
      .setTitle("Upload Documents") 
      .setDescription("Upload single or multiple documents in a single attempt now, maximum being 5.\n \nChoose between Images option or PDF's option now. \n") 
      //.setStyle(Style.HEADER_WITH_ICON) 
      .setHeaderColor(R.color.colorPrimary) 
      .withDialogAnimation(true) 
      .setIcon(R.drawable.ic_pdf) 
      .setCancelable(true) 
      .autoDismiss(false) 
      .setPositiveText(R.string.images) 
      .onPositive(new MaterialDialog.SingleButtonCallback() { 
       @Override 
       public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { 
        dialog.dismiss(); 
        FilePickerBuilder.getInstance().setMaxCount(5) 
          .setSelectedFiles(selectedPhotos) 
          .setActivityTheme(R.style.AppTheme) 
          .pickPhoto(getActivity()); 
       } 
      }) 
      .setNeutralText(R.string.pdf) 
      .onNeutral(new MaterialDialog.SingleButtonCallback() { 
       @Override 
       public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { 
        dialog.dismiss(); 
        FilePickerBuilder.getInstance().setMaxCount(5) 
          .setSelectedFiles(filePaths) 
          .setActivityTheme(R.style.AppTheme) 
          .pickDocument(getActivity()); 
       } 
      }) 
      .show(); 
} 

Для этого диалогового окна, хотя, вы должны иметь в Gradle файле

compile com.github.javiersantos:MaterialStyledDialogs:2.0' 

наконец, onActivityResult() будет вызываться для извлечения результата что-то вроде этого

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case FilePickerConst.REQUEST_CODE_PHOTO: 
       if (resultCode == Activity.RESULT_OK && data != null) { 
        selectedPhotos = new ArrayList<>(); 
        selectedPhotos.addAll(data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_PHOTOS)); 
       } 
       break; 
      case FilePickerConst.REQUEST_CODE_DOC: 
       if (resultCode == Activity.RESULT_OK && data != null) { 
        filePaths = new ArrayList<>(); 
        filePaths.addAll(data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_DOCS)); 
       } 
       break; 
     } 

    } 

AppTheme

<!-- Base application theme. --> 
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 

     <!-- Customize your theme here. --> 
     <item name="android:windowNoTitle">true</item> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style>