打开使用DownloadManager下载的文件

时间:2015-05-05 14:53:09

标签: android android-intent android-download-manager download-manager

我试图打开使用DownloadManager下载的文件。下载完成后我收到本地文件名。之后,我建议我的用户打开文件(或拒绝)。我用来打开文件的方法是:

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();
    }
}

我传递给该方法的文件名是从DownloadManager查询方法接收的:

@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

奇怪的行为发生在名称中包含空格的文件中。当我执行openFile方法时,它总是显示Toast(即使安装了该mime类型的应用程序)。然而,通过单击DownloadManager通知,Android打开PDF文件(如果两个或更多应用程序可以处理文件打开,则显示应用程序选择器)。那么,当用户点击通知时,SO启动的Intent是什么?如何更改我的方法以打开其名称上还有空格的文件?

可以使用openFile方法打开的文件示例:

  

D / GdDocumentacionDownloaderHelper:openFile试图打开文件:file:///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建议之后,它现在正在运行。问题在于我从DownloadManager使用的收到的参数。在我的openFile()方法中使用的正确文件名是

cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));

而不是:

cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));

0 个答案:

没有答案