我试图打开一个文件下载的使用下载管理器。 下载完成后,我发现了本地文件名。 从那以后,我建议我的用户打开文件(或下降)。 我用打开文件的方法是:
private void openFile(String fileName) {
MimeTypeMap map = MimeTypeMap.getSingleton();
String ext = MimeTypeMap.getFileExtensionFromUrl((fileName));
String type = map.getMimeTypeFromExtension(ext);
Intent install = new Intent(Intent.ACTION_VIEW);
Log.d(TAG, "openFile Trying to open file: " + Uri.fromFile(new File(fileName)));
install.setDataAndType(Uri.fromFile(new File(fileName)), type);
try {
mCx.startActivity(install);
} catch (Exception e) {
//Si no hay ninguna app capaz de abrir el archivo, fallará.
e.printStackTrace();
Toast.makeText(mCx, mCx.getString(R.string.sin_app_archivo), Toast.LENGTH_LONG).show();
}
}
我传递给方法的文件名是从下载管理器查询方法获得:
@Override
public void onReceive(Context context, Intent intent) {
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (myDownloadreference == reference) {
Log.d(TAG, "onReceive descarga es la nuestra");
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(reference);
Cursor cursor = mDownloadManager.query(query);
cursor.moveToFirst();
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
//This is String I pass to openFile method
String savedFilePath = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
...
}
}
它通常与大多数文件类型的作品。 如果没有任何应用程序能够打开它,它会显示一个Toast
。
奇怪的行为发生与它的名字空间的文件。 它总是显示吐司(即使在安装该MIME类型的应用程序),当我执行我的方法中openFile。 然而,通过点击下载管理通知,Android开放式PDF文件(或显示应用程序选择器,如果两个或更多的应用程序可以处理文件打开)。 那么,什么是当用户点击通知SO启动意图是什么? 我怎样才能改变,以便与它的名字也空间打开文件我的方法是什么?
可与中openFile方法被公开文件的一个例子:
d / GdDocumentacionDownloaderHelper:中openFile试图打开文件:文件:///storage/emulated/0/Android/data/es.ineco.app/files/Download/ic_action_delete-11.zip
这不能与中openFile方法被公开文件的另一个例子:
d / GdDocumentacionDownloaderHelper:中openFile试图打开文件:文件:///storage/emulated/0/Android/data/es.ineco.app/files/Download/10-02_Prevbat_363%2B570_363%2B820_V1%20(1)-5。 PDF格式
编辑
@CommonsWare建议之后,它现在的工作。 问题是与我从下载管理器使用所接收PARAM。 正确的文件名在我的使用openFile()
方法
cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
代替:
cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));