首页 > 解决方案 > 使用导航选项卡打开相机

问题描述

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

case R.id.navigation.dashboard:
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivity(intent);
    return true;

我应该使用按钮作为替代吗?

编辑:更改了问题的标题和一些详细信息以进行更多说明

EDIT2:问题已解决,谢谢!我的问题实际上是没有通过应用程序信息手动检查应用程序权限,即使我已经在 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" />

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

标签: javaandroidandroid-studioandroid-camera

解决方案


有几件事是错误的:

  1. 如果您只想对相机图片使用意图,为什么要为相机使用标签。
  2. 意图应如下所示:

注意:这里要设置 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);
}
  1. 由于为结果开始活动,您需要声明一个变量 TAKE_PICTURE:

    private static final int TAKE_PICTURE = 123
    
  2. 也许你想使用 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());
                 }
             }
         }
     }
    

推荐阅读