0

私のアプリでは、ネイティブ カメラ アプリから写真をキャプチャし、目的のフォルダーに保存してから、そのキャプチャした画像を新しいアクティビティに表示する必要があります。これまでの私のコード

ネイティブカメラを起動するには

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

私の他の方法

private static Uri getOutputMediaFileUri(int type){
    return Uri.fromFile(getOutputMediaFile(type));
}

/**Create a file for saving an image*/
private static File getOutputMediaFile(int type){

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "KidzPuzzle");

    //Create a storage directory if it does not exist
    if(! mediaStorageDir.exists()){
        if(! mediaStorageDir.mkdirs()){
            Log.d("KidzPuzzle", "Failed to create directory");
            return null;
        }
    }

    //Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile = null;
    if(type == MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getPath()+File.separator+"IMG_"+timeStamp+".jpg" );
        return mediaFile;
    }else{
        return null;
    }
}

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE){
        if(resultCode == RESULT_OK){
            //Image created and saved successfully to the specified fileUri
            //Toast.makeText(this, "Image saved to : \n"+data.getDataString(), Toast.LENGTH_LONG).show();
            String filePath = ((Uri) data.getExtras().get(MediaStore.EXTRA_OUTPUT)).toString();
            Bitmap bitmap = BitmapFactory.decodeFile(filePath);
            startActivity(new Intent(this, SplitImageActivity.class).putExtra("image", bitmap));
        }else if(resultCode == RESULT_CANCELED){
            //user canceled the captured image
        }else{
            //Image capture failed
        }
    }
}

onActivityResultのインテント変数データは常に null です。私が間違っているところを助けてください。

注: デバッグすると、 dataの値により、コントロールは常に RESULT_OK 条件を満たし、NullPointerExceptionが表示されます。

もう1つ、使用していない場合

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

ネイティブ カメラを開始する前にこのコードを使用すると、データは null ではありません。

私を助けてください。

4

1 に答える 1

0
Chandra Sekhar, 

最後に述べたようにdon't specify location、画像の場合は場所を渡すとnullが返され、場所で画像を受け取ることが明確に示されます。したがって、取得時にそれを保存する必要があります。data is not nullAFAIKlocation separately and use that to access imageRESULT_OK

于 2012-06-25T10:24:11.233 に答える