Java 使用导航选项卡打开相机

Java 使用导航选项卡打开相机,java,android,android-studio,android-camera,Java,Android,Android Studio,Android Camera,我刚开始使用Android Studio开发一个实验应用程序。我当前的问题是,试图将导航栏中的一个选项卡设置为照相机选项卡,以便按下时,照相机打开,用户拍照,然后程序对该图片执行操作。但是,当我尝试将选项卡设置为照相机时,程序在单击选项卡后立即崩溃。我将这部分代码当前设置为该特定选项卡的主代码 case R.id.navigation.dashboard: Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

我刚开始使用Android Studio开发一个实验应用程序。我当前的问题是,试图将导航栏中的一个选项卡设置为照相机选项卡,以便按下时,照相机打开,用户拍照,然后程序对该图片执行操作。但是,当我尝试将选项卡设置为照相机时,程序在单击选项卡后立即崩溃。我将这部分代码当前设置为该特定选项卡的主代码

case R.id.navigation.dashboard:
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivity(intent);
    return true;
我是否应该使用按钮作为替代

编辑:更改标题和问题的一些细节,以获得更多澄清

EDIT2:问题解决了,谢谢!我的问题实际上是没有通过app info手动检查app权限,即使我已经在XML文件上有了这些权限脚本

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


所以我忘了在我的程序上添加一个权限弹出窗口

这有两个问题:

  • 如果您只是想使用相机图片的意图,为什么要使用相机选项卡
  • 意图应该如下所示:
  • 注意:此处应设置imageUri,以便以后使用

    void takePhoto(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File photo = new File(Environment.getExternalStorageDirectory(),  "image.jpg");
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
                Uri.fromFile(photo));
        imageUri = Uri.fromFile(photo);
        startActivityForResult(intent, TAKE_PICTURE);
    }
    
  • 由于要为结果启动活动,您需要声明一个变量TAKE_PICTURE:

    private static final int TAKE_PICTURE = 123
    
  • 也许您想使用tab来显示图片,它可以如下所示:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         switch (requestCode) {
         case TAKE_PICTURE:
             if (resultCode == Activity.RESULT_OK) {
                 Uri selectedImage = imageUri;
                 getContentResolver().notifyChange(selectedImage, null);
                 Bitmap bitmap;
                 try {
                      bitmap = android.provider.MediaStore.Images.Media
                      .getBitmap(getContentResolver(), selectedImage);
    
                     // show image here in an imageView
    
                      } catch (Exception e) {
                     Log.e("Camera", e.toString());
                 }
             }
         }
     }
    

  • 如果不想打开新的
    活动
    ,可以使用CameraX库。
    您有很好的使用示例。

    Gah,我很抱歉这样的措辞,我的意思是写“在导航栏选项卡上使用”,而不是普通选项卡,如果这有什么不同的话。