你應該去選擇2.不要試圖自己做所有事情。詢問系統是否有任何可以打開文件的應用程序,如果沒有這樣的應用程序存在,通知用戶沒有應用程序來打開該文件。您也可以提供指向可能打開相關文件的應用程序的鏈接。
使用此方法的重要部分是您需要MIME類型的文件,因爲系統會根據所提供的類型做出決定。此外,您可能需要一個內容提供商,以便其他應用程序可以實際打開沙箱中的文件。幸運的是,框架的確提供了File Provider只是爲了這種情況。如果您沒有將文件存儲在應用程序目錄中,則不需要提供者。
的代碼看起來是這樣的
File yourFile; //expecting the file to exist
String extension; //expecting the file extension (pdf, doc, ...) to exist
String mimetype; //may be null. You may obtain the mimetype from the server request in the http Content-Type header.
if (mimetype == null || mimetype.trim().isEmpty()) {
//mimetype does no exist, try to guess mimetype from the extension
mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
}
if (mimetype == null || mimetype.trim.isEmpty()) {
//don't know what the mime type is. All we know is that it is a file we want to open.
mimetype = "file/*";
}
Intent openFileIntent = new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(yourFile)), mimetype);
if (openFileIntent.resolveActivity(getPackageManager()) != null) {
this.startActivity(openFileIntent);
} else {
Toast.makeText(this, R.string.no_application_can_open_file, Toast.LENGTH_SHORT).show();
}
但我的應用程序是所有有關文件,如果用戶已去到另一個應用程序來查看我提供他不會是打敗鏈接中的文件目的? –
不是。您仍在提取並顯示指向用戶的鏈接。這是應用程序的工作,它應該做得很好。爲其他應用程序委派顯示鏈接內容是這類用例的推薦方式。看看文件管理器等其他應用程序。你很少會找到一個能夠完成所有工作的實現。 – GPuschka