Android: не удается открыть файл CSV, который загружен из DownloadManager - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь открыть файл CSV , загруженный с помощью DownloadManager, с помощью приложений, доступных в телефоне. Но я не могу его открыть. Сторонние приложения возвращают сообщение об ошибке Тостовые сообщения или Диалоговое окно оповещения о том, что местоположение файла не найдено. Но когда я открываю файл вручную, приложение открывается нормально. Ниже я написал код для доступа к загруженному файлу и открытия с помощью Intent Chooser.

fun openDownloadedFile(referenceId : Long){
    if (downloadReference === referenceId)
    {
        val query = DownloadManager.Query()
        query.setFilterById(downloadReference)
        var downloadManager = activity?.getSystemService(DOWNLOAD_SERVICE) as DownloadManager?
        val c = downloadManager?.query(query)!!
        if (c.moveToFirst())
        {
            val columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS)
            if (DownloadManager.STATUS_SUCCESSFUL === c.getInt(columnIndex))
            {
                var localUri:String = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))
                if (localUri.substring(0, 7).equals("file://")) {
                    localUri =  localUri.substring(7);
                }
                var file = File(localUri);
                val fileExtension = MimeTypeMap.getFileExtensionFromUrl(localUri)
                var mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension)
                if (mimeType != null)
                {
                    mimeType = "text/csv" // even after removing manual mime type it is not working.  
                    var intent =  Intent(Intent.ACTION_VIEW);
                    //var file = File(localUri);
                    var absoluteFilePath = file.getAbsolutePath();
                    var uri = Uri.parse( "content:/"+absoluteFilePath);
                    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                    intent.setDataAndTypeAndNormalize(uri, mimeType);
                    try
                    {
                        // Add chooser to open file.
                        var intentChooser = Intent.createChooser(intent, "Choose Application");
                        startActivityForResult(intentChooser,1000);
                    }
                    catch (e:ActivityNotFoundException) {
                    }
                }
            } else {
                Log.d(“TAG”, "Download Failed.. status : "+c.getInt(columnIndex))
            }
        }
    }
}

Когда я выбрал Microsoft Excel, он показывает, что не удается открыть файл. Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...