【问题标题】:Not getting the captured image path未获取捕获的图像路径
【发布时间】:2018-12-10 04:14:15
【问题描述】:

我正在构建一个应用程序,我在其中上传了图像或 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() 也被弃用了。

Logcat

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)

【问题讨论】:

  • 你已经有了路径。在FileProvider.getUriForFile() 调用中作为最后一个参数传递的是image。你不需要 CursormanagedQuery() 的东西。
  • 好的,但我如何将它存储在文件中? @MikeM。
  • 已经是File : File image = new File(imageFolder, timestamp+ ".jpg");
  • camerauri 是 Uri,我在其中调用 FileProvider.getUriForFile(),我希望在 onActivityResult @MikeM 的文件文件中捕捉到这个图像。
  • 声明File作为一个类字段——例如,private File image;——然后从上述行的开头删除File——image = new File(imageFolder, timestamp+ ".jpg");——然后在@987654337中使用image @。请注意,当相机应用程序启动时,您的 Activity 可能会被破坏,因此您应该以某种方式保存它;例如,处于已保存的实例状态,或将其持久化到存储中。

标签: android android-camera uri


【解决方案1】:

您可以通过调用获取图像的绝对路径:

image.getAbsolutePath();

然后您可以将此路径存储在您的意图中并在onActivityResult 中使用它

【讨论】:

    【解决方案2】:

    考虑到您的评论,这是我写的,谢谢。 @Mike 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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-18
      • 2014-01-20
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 2012-05-10
      • 2014-09-27
      • 1970-01-01
      相关资源
      最近更新 更多