打开与下载管理器下载的文件(Opening a file downloaded with Downl

2019-10-22 23:30发布

我试图打开一个文件下载的使用下载管理器。 下载完成后,我发现了本地文件名。 从那以后,我建议我的用户打开文件(或下降)。 我用打开文件的方法是:

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));
文章来源: Opening a file downloaded with DownloadManager