将相机与 android 一起使用
Use the camera with android
我正在尝试将相机与我的应用程序一起使用,但是当我按下按钮时应用程序崩溃并且在 Android 监视器中出现以下消息:
java.lang.SecurityException: Permission Denial: starting Intent {
act=android.media.action.IMAGE_CAPTURE
cmp=com.android.camera2/com.android.camera.CaptureActivity } from
ProcessRecord{bd3e6b7 4753:com.demonsystem.trackingticket/u0a94} (pid=4753,
uid=10094) with revoked permission android.permission.CAMERA
这是我主要的代码 activity:
btnCamara.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i,0); <-- here shows the error
ocultar();
}
});
这些是权限:
private void checkCameraPermission() {
int permissionCheck = ContextCompat.checkSelfPermission(
this, Manifest.permission.CAMERA);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
Log.i("Mensaje", "No se tiene permiso para la camara!.");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 225);
} else {
Log.i("Mensaje", "Tienes permiso para usar la camara.");
}
}
这些是我在清单中写的用途:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
btnCamara.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick (View view){
if (hasPermissionUseCamera()) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, 0);
ocultar();
}
}
}
public boolean hasPermissionUseCamera() {
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 0);
return false;
}
} else { //permission is automatically granted on sdk<23 upon installation
return true;
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 0: {
if (getActivity().checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, 0);
ocultar();
} else {
Toast.makeText(getActivity(), "Access Denied", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
在触发 Image_Capture 操作之前,只需检查您的应用是否具有权限。
我正在尝试将相机与我的应用程序一起使用,但是当我按下按钮时应用程序崩溃并且在 Android 监视器中出现以下消息:
java.lang.SecurityException: Permission Denial: starting Intent {
act=android.media.action.IMAGE_CAPTURE
cmp=com.android.camera2/com.android.camera.CaptureActivity } from
ProcessRecord{bd3e6b7 4753:com.demonsystem.trackingticket/u0a94} (pid=4753,
uid=10094) with revoked permission android.permission.CAMERA
这是我主要的代码 activity:
btnCamara.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i,0); <-- here shows the error
ocultar();
}
});
这些是权限:
private void checkCameraPermission() {
int permissionCheck = ContextCompat.checkSelfPermission(
this, Manifest.permission.CAMERA);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
Log.i("Mensaje", "No se tiene permiso para la camara!.");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 225);
} else {
Log.i("Mensaje", "Tienes permiso para usar la camara.");
}
}
这些是我在清单中写的用途:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
btnCamara.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick (View view){
if (hasPermissionUseCamera()) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, 0);
ocultar();
}
}
}
public boolean hasPermissionUseCamera() {
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 0);
return false;
}
} else { //permission is automatically granted on sdk<23 upon installation
return true;
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 0: {
if (getActivity().checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, 0);
ocultar();
} else {
Toast.makeText(getActivity(), "Access Denied", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
在触发 Image_Capture 操作之前,只需检查您的应用是否具有权限。