【问题标题】:Using intent to use Camera in Android在 Android 中使用意图使用相机
【发布时间】:2017-06-20 21:30:50
【问题描述】:

我正在使用以下代码通过意图使用相机。 在意图参数中,我传递了android.provider.MediaStore.ACTION_IMAGE_CAPTURE。 它能够打开相机。 但问题是它意外停止。 问题是它在OnActivityResults 上给出了空指针异常。 我使用了以下代码:

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);
}
}

谁能帮我解决这个问题?

【问题讨论】:

  • 请清楚,你的问题是什么,空指针异常或相机意图意外停止
  • 我在这里分享运行应用程序后发生的情况。 1> 屏幕出现按钮拍照。 2> 点击按钮后我的相机打开 3> 然后相机意外停止
  • P.S.- Toast 不会显示。 Toast.makeText(demo.this, "图片未拍摄", Toast.LENGTH_LONG).show();

标签: android camera


【解决方案1】:

尝试请求代码 1337。

startActivityForResult(cameraIntent , 1337);

【讨论】:

  • 什么是 1337?我使用“CAMERA_REQUEST”作为参数,其值为 1888。这有什么区别吗?
  • 我不这么认为。实际上我遇到了同样的问题,只是遇到了link,在示例中它使用的是代码 1337 ,没有任何具体原因我使用它并且它有效。 :) 除此之外,它只是在您的应用程序中定义为相机图像捕获 Intent 返回的请求代码并使用此值来区分不同类型的结果,这没有什么区别。
  • 1337、2500、1888与硬件规格有关系吗?恐怕我的手机可以用1337,但是对于我的用户的手机,它可能不起作用
【解决方案2】:

这就是我的使用方法

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

【讨论】:

    【解决方案3】:

    您的清单中有以下声明吗?:

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

    ?? 我以前也是这样... 这是我的意图:

    File file = new File( _path );
        Uri outputFileUri = Uri.fromFile( file );
    
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
        intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
        intent.putExtra( MediaStore.EXTRA_VIDEO_QUALITY,1);
    

    我的代码和你的代码之间唯一的细微差别 - 我在调用之间发送的 URI 中有文件路径

    【讨论】:

    • 我不认为这些许可和声明对于您使用的意图是必要的。
    【解决方案4】:

    我使用了下面的代码,它成功了!

    @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);
        }
    
    }
    

    【讨论】:

      【解决方案5】:

      在 Android 中使用 Intent 使用相机

      ##

         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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        • 2023-04-11
        相关资源
        最近更新 更多