Android 无法共享或打开下载到";的pdf文件;下载「;包含其他应用程序的文件夹
我使用downloadManager下载文件:Android 无法共享或打开下载到";的pdf文件;下载「;包含其他应用程序的文件夹,android,share,android-download-manager,android-fileprovider,Android,Share,Android Download Manager,Android Fileprovider,我使用downloadManager下载文件: private fun downloadFile(exportModel: Export, i: Int) { val request: DownloadManager.Request = DownloadManager.Request(Uri.parse(exportModel.data.path + exportModel.data.files[i].filename)) .setTitle(exportMode
private fun downloadFile(exportModel: Export, i: Int) {
val request: DownloadManager.Request = DownloadManager.Request(Uri.parse(exportModel.data.path + exportModel.data.files[i].filename))
.setTitle(exportModel.data.files[i].filename)
.setDescription("Downloading")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
.setAllowedOverMetered(true)
.setAllowedOverRoaming(true)
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, exportModel.data.files[i].filename)
val downloadManager = activity?.getSystemService(DOWNLOAD_SERVICE) as DownloadManager
val downloadID = downloadManager.enqueue(request) // enqueue puts the download request in the queue.
}
下载完成(可以从AS中的设备文件浏览器打开),然后我尝试共享它(例如,我有一个名为“Export file.pdf”的文件,exists()返回true):
调试值:
file = /storage/emulated/0/Download/Export File.pdf
fileUri=content://com.thirdframestudios.android.expensoor.cache_directory_provider/Download/Export%20File.pdf
显示共享表(在emulator api 29上测试),但当我选择某个应用程序时(例如,驱动器,当它尝试上载文件时,我会出错)。如果我尝试用ACTION_视图打开文件(pdf查看器打开一小会儿,然后关闭),也会发生类似的情况。
尝试使用操作视图打开文件时出错:
2020-10-21 12:58:32.183 18445-18496/? E/DisplayData: openFd: java.io.FileNotFoundException: open failed: EACCES (Permission denied)
2020-10-21 12:58:32.183 18445-18496/? E/PdfLoader: Can't load file (doesn't open) Display Data [PDF : Export File.pdf] +ContentOpenable, uri: content://com.thirdframestudios.android.expensoor.cache_directory_provider/Download/Export%20File.pdf
我的文件提供程序:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.thirdframestudios.android.expensoor.cache_directory_provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
我的文件\u paths.xml文件:
注册广播接收器,以便在下载管理器准备就绪时通知您 您可以从下载管理器获取下载文件的uri,您可以在操作视图中使用该uri
或者使用setDestinationNexternalFilesDir()下载到getExternalFilesDir()。注册广播接收器,以便在下载管理器就绪时通知您 您可以从下载管理器获取下载文件的uri,您可以在操作视图中使用该uri
或者使用setDestinationNexternalFilesDir()下载到getExternalFilesDir()。经过几个小时的搜索,我找到了类似的解决方案。只需将目录设置从下载请求中删除即可。下线。在安卓11上测试
setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, exportModel.data.files[i].filename)
//拆下上面的线。最后下载请求如下所示:>
val request = DownloadManager.Request(Uri.parse(url))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE or DownloadManager.Request.NETWORK_WIFI)
request.setTitle(requireContext().getString(R.string.downloaded))
request.setDescription(keyValue)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
manager.enqueue(request)
经过几个小时的搜索,我找到了这样的解决方案。只需将目录设置从下载请求中删除即可。下线。在安卓11上测试
setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, exportModel.data.files[i].filename)
//拆下上面的线。最后下载请求如下所示:>
val request = DownloadManager.Request(Uri.parse(url))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE or DownloadManager.Request.NETWORK_WIFI)
request.setTitle(requireContext().getString(R.string.downloaded))
request.setDescription(keyValue)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
manager.enqueue(request)
DownloadManager
通过另一个应用程序进行下载。抱歉,即使您的应用程序是请求下载的应用程序,您的应用程序也无法读取Android 10+上下载的内容。试试看你是否运气更好。我自己下载的,我无法保存到“Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载)”中。如果我下载到上下文!!。getExternalFilesDir(Environment.DIRECTORY_下载)它可以工作(可以打开和共享)。若我做对了,就并没有办法将它dll到公共下载目录并从那个里共享它了?我想让我的用户在文件管理器应用程序中看到下载的文件(以及在我的应用程序被删除后保留在手机上的文件),所以我有什么选择?我现在能提供给你的最好的东西是。@Commonware现在面临着同样的问题。我们现在有任何经验证的解决方案吗?TIA.DownloadManager
通过另一个应用程序进行下载。抱歉,即使您的应用程序是请求下载的应用程序,您的应用程序也无法读取Android 10+上下载的内容。试试看你是否运气更好。我自己下载的,我无法保存到“Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载)”中。如果我下载到上下文!!。getExternalFilesDir(Environment.DIRECTORY_下载)它可以工作(可以打开和共享)。若我做对了,就并没有办法将它dll到公共下载目录并从那个里共享它了?我想让我的用户在文件管理器应用程序中看到下载的文件(以及在我的应用程序被删除后保留在手机上的文件),所以我有什么选择?我现在能提供给你的最好的东西是。@Commonware现在面临着同样的问题。我们现在有任何经验证的解决方案吗?蒂亚。