选择要打开文件的应用程序

时间:2019-03-02 16:57:29

标签: android file android-intent mime-types

因此,我有ListView个对象,其中PublicFile个对象,其中包含filecontent(字节数组)和filename(字符串)。 如果我从列表中选择一个文件,我想打开它。为此,我首先将文件保存在特定的文件夹中,然后尝试打开它。我遇到的问题是,无论我选择哪个文件(txt,mp3,jpg,docx),它始终使用android pdf阅读器打开文件。从逻辑上讲,我收到无法打开文件的错误。我只能打开pdf文件。

publicDocs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        try{
            PublicFile selFile = (PublicFile) adapterView.getItemAtPosition(i);
            // Get the directory for the user's public pictures directory.
            File folder = new File(Environment.getExternalStorageDirectory() + "/myFolder");
            boolean success = true;
            if (!folder.exists()) {
                success = folder.mkdir();
            }
            if (success) {
                //safe file in order to open it later
                File file= new File(folder.getAbsolutePath() +"/"+ selFile.getFileName());

                FileOutputStream fos = new FileOutputStream(file.getAbsolutePath());
                fos.write(selFile.getFileContent());
                fos.close();

                //open file
                MimeTypeMap myMime = MimeTypeMap.getSingleton();
                Intent newIntent = new Intent(Intent.ACTION_VIEW);
                String mimeType = myMime.getMimeTypeFromExtension(fileExt(file.getAbsolutePath()).substring(1));
                newIntent.setDataAndType(Uri.fromFile(file.getAbsoluteFile()),mimeType);
                newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(newIntent);
            } else {
                throw new Exception("could not open folder");
            }
        }catch(Exception ex){
            System.out.println("Err:"+ex.getMessage());
        }

});


private String fileExt(String url) {
    if (url.indexOf("?") > -1) {
        url = url.substring(0, url.indexOf("?"));
    }
    if (url.lastIndexOf(".") == -1) {
        return null;
    } else {
        String ext = url.substring(url.lastIndexOf(".") + 1);
        if (ext.indexOf("%") > -1) {
            ext = ext.substring(0, ext.indexOf("%"));
        }
        if (ext.indexOf("/") > -1) {
            ext = ext.substring(0, ext.indexOf("/"));
        }
        return ext.toLowerCase();

    }
}

我该如何解决问题?我还尝试添加硬编码的模仿类型,但仍然无法正常工作。

0 个答案:

没有答案