使用导航选项卡打开相机
Opening camera with a navigation tab
我刚开始使用 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" />
所以我忘了在我的程序上添加权限弹出窗口。
这有几点不对:
- 如果您只是要为相机图片使用 intent,为什么要为相机使用标签。
- 意图应如下所示:
注意:这里要设置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);
}
因为开始一个 activity 的结果你需要声明一个变量 TAKE_PICTURE:
private static final int TAKE_PICTURE = 123
也许你想用标签来显示图片,它看起来像这样:
@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());
}
}
}
}
如果您不想打开新的 Activity
,您可以使用 CameraX 库。
Here 你有很好的示例如何使用它。
我刚开始使用 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" />
所以我忘了在我的程序上添加权限弹出窗口。
这有几点不对:
- 如果您只是要为相机图片使用 intent,为什么要为相机使用标签。
- 意图应如下所示:
注意:这里要设置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);
}
因为开始一个 activity 的结果你需要声明一个变量 TAKE_PICTURE:
private static final int TAKE_PICTURE = 123
也许你想用标签来显示图片,它看起来像这样:
@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()); } } } }
如果您不想打开新的 Activity
,您可以使用 CameraX 库。
Here 你有很好的示例如何使用它。