Android 对于MIME类型,请对这些文件格式使用真正的MIME类型(通过您喜爱的搜索引擎在几秒钟内即可获得)。您列出的唯一没有特殊意义的文件扩展名是.LOG。请注意,这仅在API级别19+上可用。谢谢,我也找不到这种“额外的MIME类型”。我得查一些例子。我知道基本

Android 对于MIME类型,请对这些文件格式使用真正的MIME类型(通过您喜爱的搜索引擎在几秒钟内即可获得)。您列出的唯一没有特殊意义的文件扩展名是.LOG。请注意,这仅在API级别19+上可用。谢谢,我也找不到这种“额外的MIME类型”。我得查一些例子。我知道基本,android,android-intent,Android,Android Intent,对于MIME类型,请对这些文件格式使用真正的MIME类型(通过您喜爱的搜索引擎在几秒钟内即可获得)。您列出的唯一没有特殊意义的文件扩展名是.LOG。请注意,这仅在API级别19+上可用。谢谢,我也找不到这种“额外的MIME类型”。我得查一些例子。我知道基本的MIME类型,但我只想接受一个文件,但我不知道那是什么文件类型。用户可以选择它。通过阅读您的链接,我认为这是正确的方法。它也将一次性使用,并且不会通过重新启动而持久化,但我很感谢您的知识。@commonware那么,您能否详细说明如何支持19


对于MIME类型,请对这些文件格式使用真正的MIME类型(通过您喜爱的搜索引擎在几秒钟内即可获得)。您列出的唯一没有特殊意义的文件扩展名是
.LOG
。请注意,这仅在API级别19+上可用。谢谢,我也找不到这种“额外的MIME类型”。我得查一些例子。我知道基本的MIME类型,但我只想接受一个文件,但我不知道那是什么文件类型。用户可以选择它。通过阅读您的链接,我认为这是正确的方法。它也将一次性使用,并且不会通过重新启动而持久化,但我很感谢您的知识。@commonware那么,您能否详细说明如何支持19级以下api的多种mime类型(从api 16到以后)@SagarPatel:在api级别19,IIRC之前,不支持多种mime类型。在您的UI中,您需要询问用户要检索的MIME类型,然后将其与
ACTION\u GET\u CONTENT
一起使用。或者,使用通配符MIME类型,然后验证用户选择的内容的实际MIME类型。非常感谢代码。我正在寻找一个使用Intent.EXTRA_MIME_类型的例子,你的帖子马上就展示了这一点。
static final int PICK_FILE_REQUEST = 101;

private String pathToFile = "";

public String selectFile()  {
    String path = "";
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT), chooser = null;
    intent.setType("*/*");
    chooser = Intent.createChooser(intent, "Find file to Print");
    startActivityForResult(chooser, PICK_FILE_REQUEST);
    path = pathToFile;
    return path;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)   {
    if(requestCode == PICK_FILE_REQUEST){
        if(resultCode == Activity.RESULT_OK){
            pathToFile = data.getDataString();
            String temp = data.getStringExtra("path");
            Log.d("Files Fragment: ", pathToFile);
            Log.d("Files Fragment: ", temp);
        }
    }
}
public void findReviewsToLoad() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    String [] mimeTypes = {"text/csv", "text/comma-separated-values"};
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
    startActivityForResult(intent, FIND_FILE_REQUEST_CODE);
}
private static final int CHOOSE_FILE_REQUEST = 1;
///////////////////////////////////////////////////
 public void chooseFile(){
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("*/*");
        String[] extraMimeTypes = {"application/pdf", "application/doc"};
        intent.putExtra(Intent.EXTRA_MIME_TYPES, extraMimeTypes);
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        startActivityForResult(intent, CHOOSE_FILE_REQUEST);


    }

/////////////////////////////////////////////////////

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        String path = "";
        if (resultCode == RESULT_OK) {
            if (requestCode == CHOOSE_FILE_REQUEST) {
                ClipData clipData = data.getClipData();
                //null and not null path
                if(clipData == null){
                    path += data.getData().toString();
                }else{
                    for(int i=0; i<clipData.getItemCount(); i++){
                        ClipData.Item item = clipData.getItemAt(i);
                        Uri uri = item.getUri();
                        path += uri.toString() + "\n";
                    }
                }
            }
        }
        selectedFileTV.setText(path);
    }
List<string> mimeTypes = new List<string>();

// Filling mimeTypes with needed MIME-type strings, with * allowed.

if (mimeTypes.Count > 0)
{
    // Specify first MIME type
    intent.SetType(mimeTypes[0]);
    mimeTypes.RemoveAt(0);
}
if (mimeTypes.Count > 0)
{
    // Specify the rest MIME types but the first if any
    intent.PutExtra(Intent.ExtraMimeTypes, mimeTypes.ToArray());
}
intent.SetType("*.*");
intent.PutExtra(Intent.ExtraMimeTypes, new string[] {"image/*"});