Итак, у меня есть 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, но он все еще не работал.