android - 如何保存和共享使用 url 下载的 pdf 文件并保存到应用程序的缓存文件夹
问题描述
使用下面的代码集,我正在尝试使用 URL 获取 pdf 文件,然后我需要通过邮件共享文件或将其保存到设备存储中。
但是我没有得到正确的语法来保存文件并共享它。使用此代码我可以邮寄它,但我无法使用应用程序 ShareIt 保存或共享它。
class PdfReaderFragment : BaseFragment(), ViewPager.OnPageChangeListener, CopyAsset.Listener, DownloadFile.Listener
{
private var pdfViewPager: PDFViewPager? = null
private var destinationPath: String? = null
override fun onSuccess(url: String?, destinationPath: String?) {
if (view != null) {
this.destinationPath = destinationPath
progressBar?.visibility = View.GONE
pdfViewPager = PDFViewPager(activity, destinationPath)
pdfPagerContainer?.addView(pdfViewPager)
pageCountTextView?.text = 1.toString() + " of " + pdfViewPager?.adapter?.count
pdfViewPager?.addOnPageChangeListener(this)
}
}
override fun onFailure(e: Exception?) {
if (view != null) {
ToastClass().show(activity, " Can't Open file")
progressBar?.visibility = View.GONE
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_pdfreader, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setTitleAtCentre(view)
shareImageView.setOnClickListener {
if (destinationPath != null) {
val file = File(destinationPath)
val uri = context?.let { it1 ->
FileProvider.getUriForFile(it1, "com.app.project.fileprovider", file)
}
val intent = Intent(Intent.ACTION_SEND)
intent.type = "application/pdf"
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.putExtra(Intent.EXTRA_SUBJECT, file.name.toString())
if (intent.resolveActivity(activity.packageManager) != null) {
ShareCompat.IntentBuilder.from(activity)
.setType("application/pdf")
.setStream(uri)
.setSubject(file.name.toString())
.startChooser()
} else ToastClass().show(activity, "NOT FOUND")
}
}
RemotePDFViewPager(context, arguments.getString("url"), this)
}
override fun success(assetName: String?, destinationPath: String) {
progressBar.visibility = View.GONE
pdfViewPager = PDFViewPager(activity, destinationPath)
pdfPagerContainer.addView(pdfViewPager)
pageCountTextView.text = 1.toString() + " of " + pdfViewPager?.adapter?.count
pdfViewPager?.addOnPageChangeListener(this)
}
override fun failure(e: Exception?) {
ToastClass().show(activity, "Can't Open File")
progressBar.visibility = View.GONE
}
override fun onPageScrollStateChanged(state: Int) {}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
pageCountTextView.text = (position + 1).toString() + " of " + pdfViewPager?.adapter?.count
}
override fun onDestroy() {
super.onDestroy()
if (pdfViewPager != null)
(pdfViewPager?.adapter as PDFPagerAdapter).close()
}
}
解决方案
这是一个链接,它将指导您使用 httpurlconnection 下载图像。 在 Android 中下载图像
如果您想明确共享某些内容,则可以在以下链接 共享内容中描述的共享意图中传递数据与意图
推荐阅读
- reactjs - React 显示 0 而不是没有短路 (&&) 条件组件
- plotly - 在情节中添加线条
- syntax - 在 yacc 工具中制作自定义错误消息
- c# - 为什么 dispose 在 Scheduler.Default.Schedule() 中什么都不做?
- unity3d - Unity - 使用简单的精灵动画或简单的粒子效果模拟水流入管道
- java - 即使文件是新创建的,File.createnewFile() 也总是返回 false
- objective-c - NSTextField:integerValue 行为不一致
- julia - Julia 语言 FEniCS 周期性边界条件
- java - 确定一个列表是否由 Java 8 中的字谜元素组成
- python - html中不显示数字时如何从网站中提取表格?