Выберите приложение, чтобы открыть файл - PullRequest
0 голосов
/ 02 марта 2019

Итак, у меня есть ListView из PublicFile объектов, которые содержат filecontent (байтовый массив) и filename (строка).Если я выберу файл из списка, я хочу открыть его.Для этого я сначала сохраняю файл в определенной папке, а затем пытаюсь открыть его.У меня проблема в том, что независимо от того, какой файл я выбираю (txt, mp3, jpg, docx), он всегда открывает файл с помощью программы чтения PDF android.Логически я получаю сообщение об ошибке, что я не могу открыть файл.Я могу открыть только 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();

    }
}

Как я могу решить проблему?Я также попытался добавить жестко закодированный mimetype, но он все еще не работал.

...