android - 如何在 onActivityResult 回调中从 PDF 选择器意图库获得的 pdfUri 获取文件路径?
问题描述
参考在同一类别中提出的问题,并作为对此的扩展:
(How to get the file path from a URI that points to a PDF document?)
我的问题:
在我的 HTC 816 Desire 手机中 [注意:此设备已升级到 MarshMallow,但仍然有 KitKat 崩溃。作为开发人员,我经历过相机是有意打开的,以获取由它捕获的图像,从不释放其资源。这给了我内部崩溃,当我尝试拍摄第二张照片时。],返回的路径以 开头"/document/primary:"
,并且它被保留'pdfUri.getPath()'
导致找不到文件异常。此外,当我搜索时'MediaStore.Images.Media.DATA'
,返回的列索引为-1。
Q1。"/document/primary:"
当列索引为-1时,我是否应该简单地从文件路径中删除。因为在更高版本的手机(23 及以上)中,这个 (pdfUri.getPath()) 工作正常,给了我正确的路径。
Q2。我应该从哪里获得手机补丁来修复Camera resource not releasing
错误,并且固件级别还有其他错误。
如果没有准确地问到这个问题,也请指导我正确地问这个问题。
解决方案
为了解决问题,我正在尝试执行以下操作:
我将把代码通用化,作为一种解决方案,用于除 PDF 之外的许多其他文件格式:
private String saveFileFromUri(Uri pdfUri){ try{ InputStream is= baseActivity.getContentResolver().openInputStream(pdfUri); byte[]bytesArray=new byte[is.available()]; int read=is.read(bytesArray); //write to sdcard File dir=new File(Environment.getExternalStorageDirectory(),"/PRJ"); boolean mkdirs=dir.mkdirs(); File myPdf=new File(Environment.getExternalStorageDirectory(),"/PRJ/myPdf.pdf"); if(read==-1&&mkdirs){ } FileOutputStream fos=new FileOutputStream(myPdf.getPath()); fos.write(bytesArray); fos.close(); // System.out.println(fileString); return myPdf.getPath(); }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } return null;}
为了能够释放相机资源,我将使用基于表面视图的相机活动,它允许这样做。这是代码的一部分:
释放相机资源:
@Override
public void onPause()
{
super.onPause();
if (mCamera != null){
// mCamera.setPreviewCallback(null);
mPreview.getHolder().removeCallback(mPreview);
releaseMediaRecorder();
mCamera.release(); // release the camera for other applications
mCamera = null;
}
}
@Override
public void onResume() {
super.onResume();
if (mCamera == null) {
mCamera=getCameraInstance();
mPreview = new CameraPreview(this.getActivity(), mCamera);
preview.addView(mPreview);
}
}
快乐编码:-)
推荐阅读
- multithreading - tbb 确定不正确的并发
- r - R 中各种成功概率的二项分布图
- laravel - Laravel 未定义偏移量:0 获取资源
- elasticsearch - 获取 Grok Debugger Kibana 的登录字段
- ios - 从另一个文件中的 SKScene 中删除 UIView
- internet-explorer - Microsoft Edge 在 IE 中打开 login.onmicrosoft.com 而不是访问页面
- elmah - 可以在 VSTS 版本中转换 ELMAH 主题吗?
- java - Vector not changing with "AES/CBC/pkcs7padding" in Java
- oracle - 为其他用户创建 FK 时 Oracle 表或视图不存在
- r - 如何在 ggplotly() 中使分组热图的列宽相同