如果您在清单文件中添加了这一行:
然后,您还需要在运行应用程序后请求该权限。为此,您需要在 onCreate 上方的类中设置一个变量,如下所示:
private static final int MY_CAMERA_REQUEST_CODE = 100;
之后,在你的 onCreate 中复制这个:
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_REQUEST_CODE);
}
这将检查您的用户是否批准您使用他的手机摄像头。如果没有,它会要求他这样做,将显示警报对话框。在他回复之后,你需要得到那个回复并做相应的事情。为此,将其添加为函数:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
在这一行内:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
}
你可以做你想做的事,例如。开始一项新的活动,否则。每次你想启动相机时,只需检查上面的权限,看看用户是否批准它,如果没有通知他或在你的其他活动中再次这样问他。
要启动相机拍照,您可以使用:
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
try {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
} catch (ActivityNotFoundException e) {
// display error state to the user
}
}
以下代码检索此图像并将其显示在 ImageView 中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
imageView.setImageBitmap(imageBitmap);
}
}
要将您的照片保存在设备上,您还需要这两个权限:
<manifest ...>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
记住这一点,Android 上有两种不同类型的权限。
- 普通权限(不需要用户请求)
- 危险的权限(需要询问)
您需要使用的所有三个权限都被归类为危险:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
因此,您必须向用户请求该权限。
查看Take photos 上的此文档以获取更多信息。
在Request app permissions查看此文档