如何在 android 上设置相机权限?
How to set camera permission on android?
我正在尝试使用相机,但由于某种我无法找到的原因,相机几天前就停止工作了
我有 maniset 权限,现在当我尝试拍照时它说
"java.io.ioexception permission denied"
这是清单
<uses-permission android:name="android.permission.CAMERA" />
我是这样拍照的
try {
mPhotoFile = Tools.createImageFile();
new CameraService().takePicture(CameraService.REQUEST_IMAGE_CAPTURE, contextActivity, mPhotoFile);
} catch (IOException ex) {
Log.e(TAG, "btnTakePictureSale error "+ex);
ex.printStackTrace();
}
任何关于查找内容的帮助或建议都会很棒。同样,它上周运行良好
我在多个版本的 android 上使用该应用程序并解决了同样的问题
如果您在清单文件中添加了这一行:
然后,一旦您 运行 您的应用,您还需要请求该许可。为此,您需要在 onCreate 上方的 class 中设置一个变量,如下所示:
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);
}
这将检查您的用户是否同意您使用他的 phone 相机。如果没有,它会要求他这样做,将显示警告对话框。在他回复之后,你需要得到那个回复并做相应的事情。为此,将其添加为函数:
@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();
}
你可以做你想做的,例如。开始一个新的 activity 否则。每次要启动相机时,只要像上面那样检查权限,看用户是否同意,如果没有通知他或在你的其他activity.
中再次这样询问他
要启动相机拍照,您可以使用:
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
上查看此文档
使用此请求用户的运行时权限:
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
{
try {
mPhotoFile = Tools.createImageFile();
new CameraService().takePicture(CameraService.REQUEST_IMAGE_CAPTURE, contextActivity, mPhotoFile);
} catch (IOException ex) {
Log.e(TAG, "btnTakePictureSale error "+ex);
ex.printStackTrace();
}
}else
{
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 101);
}
试试放
android:requestLegacyExternalStorage="true"
在应用程序标签内的清单上。可能相机权限没问题,但外部写入不行
我正在尝试使用相机,但由于某种我无法找到的原因,相机几天前就停止工作了
我有 maniset 权限,现在当我尝试拍照时它说
"java.io.ioexception permission denied"
这是清单
<uses-permission android:name="android.permission.CAMERA" />
我是这样拍照的
try {
mPhotoFile = Tools.createImageFile();
new CameraService().takePicture(CameraService.REQUEST_IMAGE_CAPTURE, contextActivity, mPhotoFile);
} catch (IOException ex) {
Log.e(TAG, "btnTakePictureSale error "+ex);
ex.printStackTrace();
}
任何关于查找内容的帮助或建议都会很棒。同样,它上周运行良好
我在多个版本的 android 上使用该应用程序并解决了同样的问题
如果您在清单文件中添加了这一行:
然后,一旦您 运行 您的应用,您还需要请求该许可。为此,您需要在 onCreate 上方的 class 中设置一个变量,如下所示:
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);
}
这将检查您的用户是否同意您使用他的 phone 相机。如果没有,它会要求他这样做,将显示警告对话框。在他回复之后,你需要得到那个回复并做相应的事情。为此,将其添加为函数:
@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();
}
你可以做你想做的,例如。开始一个新的 activity 否则。每次要启动相机时,只要像上面那样检查权限,看用户是否同意,如果没有通知他或在你的其他activity.
中再次这样询问他要启动相机拍照,您可以使用:
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
上查看此文档使用此请求用户的运行时权限:
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
{
try {
mPhotoFile = Tools.createImageFile();
new CameraService().takePicture(CameraService.REQUEST_IMAGE_CAPTURE, contextActivity, mPhotoFile);
} catch (IOException ex) {
Log.e(TAG, "btnTakePictureSale error "+ex);
ex.printStackTrace();
}
}else
{
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 101);
}
试试放
android:requestLegacyExternalStorage="true"
在应用程序标签内的清单上。可能相机权限没问题,但外部写入不行