因此,我有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();
}
}
我该如何解决问题?我还尝试添加硬编码的模仿类型,但仍然无法正常工作。