捕获图像时获取错误

时间:2012-11-28 06:36:47

标签: android android-intent android-camera

我想使用相机拍摄图像并想要图像路径。

我尝试使用代码,但是我收到错误。 (我按照此链接Get Path of image from ACTION_IMAGE_CAPTURE Intent

这是我的代码。

MainActivity.java

public class MainActivity  extends Activity {
 private static final int CAMERA_REQUEST = 1888; 
    private ImageView imageView;
    private Uri mCapturedImageURI;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.imageView = (ImageView)this.findViewById(R.id.imageView1);
        Button photoButton = (Button) this.findViewById(R.id.button1);
        photoButton.setOnClickListener(new View.OnClickListener() {



            @Override
            public void onClick(View v) {


                 String fileName = "temp.jpg";  
                 ContentValues values = new ContentValues();  
                 values.put(MediaStore.Images.Media.TITLE, fileName);  
                 mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  

                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
                 intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);  
                 startActivityForResult(intent, CAMERA_REQUEST);
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  

             String[] projection = { MediaStore.Images.Media.DATA}; 
             Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null); 
             int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
             cursor.moveToFirst(); 
             String capturedImageFilePath = cursor.getString(column_index_data);

             Toast.makeText(getApplicationContext(), capturedImageFilePath.toString(), Toast.LENGTH_LONG).show();

        }  
    } 
}

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="photo" >
    </Button>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" >
    </ImageView>

</LinearLayout>

的AndroidManifest.xml

<uses-feature android:name="android.hardware.camera"></uses-feature>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

错误

java.lang.RuntimeException: Unable to resume activity {com.example.cameraupload/com.example.cameraupload.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.example.cameraupload/com.example.cameraupload.MainActivity}: java.lang.NullPointerException

2 个答案:

答案 0 :(得分:0)

if (resultCode != RESULT_CANCELED) {
    if (requestCode == CAMERA_REQUEST) {

     String[] projection = { MediaStore.Images.Media.DATA };
      Cursor cursor = managedQuery(mCapturedImageURI, projection,                   null, null, null);
                int column_index_data = cursor
                        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                String capturedImageFilePath = cursor
                        .getString(column_index_data);

                Toast.makeText(getApplicationContext(),
                        capturedImageFilePath.toString(), Toast.LENGTH_LONG)
                        .show();

            }
        }

你试试这个,我认为他们会帮助你..

答案 1 :(得分:0)

最后我得到了。

photo Button.setOnClickListener(new OnClickListener(){

        public void onClick(View v) {

           File file = new File(Environment.getExternalStorageDirectory()+"/test1.jpg");
            Uri outputFileUri = Uri.fromFile(file);
            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
            startActivityForResult(intent, 0);

        }
    });



protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i("MakeMachine", "requestCode:"+requestCode + ",resultCode: " + resultCode);

                        File file = new File(Environment.getExternalStorageDirectory()+"/test1.jpg");
                        if(file.exists()){
                            BitmapFactory.Options options = new BitmapFactory.Options();
                            options.inSampleSize = 4;
                            picFileName=Environment.getExternalStorageDirectory()+"/test.jpg";
                            Toast.makeText(getApplicationContext(), picFileName, Toast.LENGTH_LONG).show();
                            Bitmap bitmap = BitmapFactory.decodeFile(picFileName, options);
                            imageView.setImageBitmap(bitmap);
                            //imageView.setVisibility(View.VISIBLE);
                        }


    }