在Android中使用intent来使用照相机

在Android中使用intent来使用照相机,android,camera,Android,Camera,我使用以下代码通过使用intent来使用照相机。 在intent的参数中,我传递的是android.provider.MediaStore.ACTION\u IMAGE\u CAPTURE。 它可以打开相机。 但问题是它意外地停止了。 问题在于,它在ActivityResults上提供空指针异常。 我使用了以下代码: public class demo extends Activity { Button ButtonClick; int CAMERA_PIC_REQUEST = 2; /**

我使用以下代码通过使用intent来使用照相机。 在intent的参数中,我传递的是android.provider.MediaStore.ACTION\u IMAGE\u CAPTURE。 它可以打开相机。 但问题是它意外地停止了。 问题在于,它在ActivityResults上提供空指针异常。 我使用了以下代码:

public class demo extends Activity {

Button ButtonClick;
int CAMERA_PIC_REQUEST = 2; 
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ButtonClick =(Button) findViewById(R.id.Camera);
    ButtonClick.setOnClickListener(new OnClickListener (){
        @Override
        public void onClick(View view)
        {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            // request code

            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if( requestCode == CAMERA_PIC_REQUEST)
    {
    //  data.getExtras()
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        ImageView image =(ImageView) findViewById(R.id.PhotoCaptured);
        image.setImageBitmap(thumbnail);
    }
    else 
    {
        Toast.makeText(demo.this, "Picture NOt taken", Toast.LENGTH_LONG);
    }
    super.onActivityResult(requestCode, resultCode, data);
}
}

有人能帮我解决这个问题吗?

您的清单中有以下声明吗

<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus" />
我的代码和您的代码之间唯一的细微差别是,我在调用之间发送URI时有文件路径

请尝试请求代码1337

startActivityForResult(cameraIntent , 1337);
这就是我使用它的方式

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1337);

我使用了下面的代码,它工作了

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
        final Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        im.setImageDrawable(null);
        im.destroyDrawingCache();
        Bundle extras = data.getExtras();
        Bitmap imagebitmap = (Bitmap) extras.get("data");
        im.setImageBitmap(imagebitmap);
    }

}
在Android中使用intent来使用照相机 ##


请清楚,你的问题是什么,空指针异常或相机意图意外停止这里我正在分享我运行应用程序后发生的事情。1> 屏幕显示“拍照”按钮。2> 单击按钮后,我的相机打开3>然后相机意外停止P.S.-将不显示烤面包片。Toast.makeText(demo.this,“图片未拍摄”,Toast.LENGTH_LONG.show();我不相信这些许可和声明对于您使用的目的是必要的。什么是1337??我使用“CAMERA_REQUEST”作为参数,其值为1888。那有什么区别吗?我不这么认为。事实上,我遇到了同样的问题,在这个例子中,它使用的是代码1337,没有任何具体的原因,我使用了它,它工作了。:)除此之外,它没有任何区别,只是在应用程序中定义为相机图像捕获意图返回的请求代码,并使用此值区分不同类型的结果。1337、2500、1888与硬件规格之间是否存在任何关系?我担心我可以在手机上使用1337,但对于我用户的手机,它可能无法使用
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
        final Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        im.setImageDrawable(null);
        im.destroyDrawingCache();
        Bundle extras = data.getExtras();
        Bitmap imagebitmap = (Bitmap) extras.get("data");
        im.setImageBitmap(imagebitmap);
    }

}
   Uri imageUri;
1:- 

     TextView camera = (TextView)findViewById(R.id.camera);
         camera.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            final Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File photo = new File(Environment.getExternalStorageDirectory(), new Date().getTime() + "myPic.jpg");
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    Uri.fromFile(photo));
            imageUri = Uri.fromFile(photo);
            startActivityForResult(cameraIntent, IMAGE_CAMERA_REQUEST);}


2:-



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

                    if (requestCode == IMAGE_CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
                        Uri selectedImage = imageUri;
                        getActivity().getContentResolver().notifyChange(selectedImage, null);
                        ContentResolver contentResolver = getActivity().getContentResolver();
                        Bitmap bitmap;
                        try {
                            bitmap = android.provider.MediaStore.Images.Media
                                    .getBitmap(contentResolver, selectedImage);

                            imageDialog(bitmap);
                        } catch (Exception e) {

                            Log.e("Camera", e.toString());
                        }

                    }
    }
    }}

I hope it's working for you.