android - 未获取捕获的图像路径
问题描述
我正在构建一个应用程序,我在其中上传了图像或 pdf 文件。图像可以通过图库或捕获图像上传。捕获图像后上传时,找不到图像的路径。
这就是我打开相机意图的方式
case 1:
File imageFolder = new File(Environment.getExternalStorageDirectory(), "/AFPL");
imageFolder.mkdir();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyymmdd_hhmmss");
String timestamp = simpleDateFormat.format(new Date());
File image = new File(imageFolder, timestamp+ ".jpg");
// Uri uriImage = Uri.fromFile(image);
if (ContextCompat.checkSelfPermission(ClientDocsUpload.this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(ClientDocsUpload.this,
new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE},
ASK_MULTIPLE_REQUEST);
}else {
camerauri = FileProvider.getUriForFile(ClientDocsUpload.this, BuildConfig.APPLICATION_ID + ".provider", image);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, camerauri);
myBundle.putString("type", type);
startActivityForResult(intent, 102);
}
break;
这是 onActivityResult
if (requestCode == 102){
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(
camerauri,
projection, null, null, null);
int column_index_data = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToLast();
String path = cursor.getString(column_index_data);
files = new File(path.substring(0,path.lastIndexOf("/")),path.substring(path.lastIndexOf("/"),path.length()));
String type = myBundle.getString("type");
UploadDocs(files,type,"image");
}
还有一个问题是managedQuery()
也被弃用了。
日志猫
W/System.err: at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:87)
at tk.smilestech.afpl.ClientDocsUpload.onActivityResult(ClientDocsUpload.java:417)
W/System.err: at android.app.Activity.dispatchActivityResult(Activity.java:6915)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4049)
W/System.err: at android.app.ActivityThread.handleSendResult(ActivityThread.java:4096)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1516)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
解决方案
考虑到您的评论,这是我写的,谢谢。@迈克M。
case 1:
File imageFolder = new File(Environment.getExternalStorageDirectory(), "/AFPL");
imageFolder.mkdir();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyymmdd_hhmmss");
String timestamp = simpleDateFormat.format(new Date());
image = new File(imageFolder, timestamp+ ".jpg");
// Uri uriImage = Uri.fromFile(image);
if (ContextCompat.checkSelfPermission(ClientDocsUpload.this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(ClientDocsUpload.this,
new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE},
ASK_MULTIPLE_REQUEST);
}else {
camerauri = FileProvider.getUriForFile(ClientDocsUpload.this, BuildConfig.APPLICATION_ID + ".provider", image);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, camerauri);
myBundle.putString("type", type);
startActivityForResult(intent, 102);
}
break;
onActivityResult
files = image;
String type = myBundle.getString("type");
UploadDocs(files,type,"image");
推荐阅读
- github - 从 Jenkins Job 将更改推送到 Github
- ocaml - OCaml 流水线和类型构造函数参数
- flutter - valuenotifier 在更新列表时未更新小部件
- git - 您可以将现有的 git 存储库转换为“blobless”吗?
- google-apps-script - 如何根据自动过滤数据动态传输所有 Google 表格中的数据
- docker - 如何在 dockerfile 中为我的服务找到我需要的基本映像
- postcss - PostCSS 插件的未知错误。您当前的 PostCSS 版本是 8.3.0,但 postcss-preset-env 使用 7.0.36
- rust - 如何捕捉anyhow::Result?
- javascript - measureText 与 WebGLRenderingContext 上下文?
- javascript - 删除状态数组后我的组件没有更新