1

Camera Intent で撮影した写真のファイル パスを String として取得しようとしていますが、String filePath は常に null です。私は何を間違っていますか?

       public void onClick(View arg0) {
        switch (arg0.getId()) {     
         case R.id.btnImageCapture:
            Intent openCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
               startActivityForResult(openCamera, OPEN_CAMERA); 
                 break;
           }
        }



        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch(requestCode){
         case OPEN_CAMERA:
             if (resultCode == RESULT_OK && data != null) {
                 Uri captureImage = data.getData();
                 String filePath = captureImage.getPath();
                 break;
              } 
           }
        }
4

2 に答える 2

1

これが、カメラで撮影した画像を取得する方法です。

前にファイルを作成し、画像が保存されると、ファイルに保存されます..

File externalFile = new File("Whatever you want the path to be...");
Uri uriSavedImage=Uri.fromFile(externalFile);
Intent launchcameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(launchcameraIntent,CAMERA_PIC_REQUEST);

次に、結果が受信されたとき。

protected void onActivityResult(int requestCode,int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == CAMERA_PIC_REQUEST) {
                  Bitmap photo = BitmapUtils.decodeFileForDisplay(new File("Whatever your file's path is");
            }
        }
}
于 2013-02-22T14:29:06.633 に答える
1

次のように、 captureImage Uri をパラメーターとして渡してみてください。

    public String getRealPathFromURI(Uri contentUri) {
        String[] projx = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, projx, null, null, null);
         int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

編集:

これは、一部のデバイスで getData() が null を返す一般的なバグです。それを防ぐには、事前に挿入された Uri を使用する必要があります。例:

  Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
 preinsertedUri = getContentResolver().insert(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                new ContentValues());

        startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

結果の取得:

         @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {

    case CAMERA_PIC_REQUEST:

        if (resultCode != 0 && data != null) {

            Uri imageUri = preinsertedUri;
            }
              break; 
                 }
于 2013-02-22T14:45:36.370 に答える