我对自己的API进行了改造,该API为我提供了具有以下内容的文件列表:
[
{
"name": "Example_file.jpg",
"ext": "jpg",
"b64": "data in base 64 format"
}
]
我使用回收者视图显示此文件列表。从回收者视图中单击一个元素时,我解码base64内容并生成如下文件:
val content = Base64.getDecoder().decode(file.getB64()!!.toByteArray())
val os = FileOutputStream(getExternalStorageDirectory().path + file.getName(), true)
os.write(content)
os.flush()
os.close()
完成此操作后,我想使用Android文件管理器打开此文件。
如何强制打开该存储的文件?
答案 0 :(得分:0)
如果要使用默认文件打开器打开该文件类型,可以使用以下方法。
[我很久以前在此站点上找到了该解决方案,我没有指向该答案的原始链接]
public void openFile(File file, Context context) {
Uri url = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (url.toString().contains(".doc") || url.toString().contains(".docx")) {
// Word document
intent.setDataAndType(url, "application/msword");
} else if (url.toString().contains(".pdf")) {
// PDF file
intent.setDataAndType(url, "application/pdf");
} else if (url.toString().contains(".ppt") || url.toString().contains(".pptx")) {
// Powerpoint file
intent.setDataAndType(url, "application/vnd.ms-powerpoint");
} else if (url.toString().contains(".xls") || url.toString().contains(".xlsx")) {
// Excel file
intent.setDataAndType(url, "application/vnd.ms-excel");
} else if (url.toString().contains(".zip") || url.toString().contains(".rar")) {
// WAV audio file
intent.setDataAndType(url, "application/x-wav");
} else if (url.toString().contains(".rtf")) {
// RTF file
intent.setDataAndType(url, "application/rtf");
} else if (url.toString().contains(".wav") || url.toString().contains(".mp3")) {
// WAV audio file
intent.setDataAndType(url, "audio/x-wav");
} else if (url.toString().contains(".gif")) {
// GIF file
intent.setDataAndType(url, "image/gif");
} else if (url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) {
// JPG file
intent.setDataAndType(url, "image/jpeg");
} else if (url.toString().contains(".txt")) {
// Text file
intent.setDataAndType(url, "text/plain");
} else if (url.toString().contains(".3gp") || url.toString().contains(".mpg") || url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) {
// Video files
intent.setDataAndType(url, "video/*");
} else {
//if you want you can also define the intent type for any other file
//additionally use else clause below, to manage other unknown extensions
//in this case, Android will show all applications installed on the device
//so you can choose which application to use
intent.setDataAndType(url, "*/*");
}
try {
if (file.exists())
context.startActivity(Intent.createChooser(intent, "Open"));
else
Toast.makeText(context, "File is corrupted", Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(context, "No Application is found to open this file.\nThe File is saved at" + Constant.DIRECTORY, Toast.LENGTH_LONG).show();
}
}