[英]revoked permission android.permission.CAMERA
我得到 ERROR revoked permission android.permission.CAMERA
我在清单上使用了相机权限
private void dispatchTakePictureIntent(int actionCode) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
switch (actionCode) {
case ACTION_TAKE_PHOTO_B:
File f = null;
try {
f = setUpPhotoFile();
mCurrentPhotoPath = f.getAbsolutePath();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
} catch (IOException e) {
e.printStackTrace();
f = null;
mCurrentPhotoPath = null;
}
break;
default:
break;
} // switch
startActivityForResult(takePictureIntent, actionCode);
}
和这样的错误:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.mobile.lunatique.photo, PID: 3590 java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera2/com.android.camera.CaptureActivity clip={text/uri-list U:file:///KTP_42342.jpg} (has extras) } from ProcessRecord{2fbbd91 3590:com.mobile.lunatique.photo/u0a60} (pid=3590, uid=10060) with revoked permission android.permission.CAMERA at android.os.Parcel.readException(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507) at android.app.Activity.startActivityForResult(Activity.java:3917) at android.app.Activity.startActivityForResult(Activity.java:3877) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:842) at com.mobile.lunatique.photo.MainActivity.dispatchTakePictureIntent(MainActivity.java:254) at com.mobile.lunatique.photo.MainActivity.access$000(MainActivity.java:33) at com.mobile.lunatique.photo.MainActivity$1.onClick(MainActivity.java:321) at android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) I/Process: Sending signal. PID: 3590 SIG: 9
谁能帮帮我??
这是我解决这个问题的方法。
与大多数答案所说的相反,从您的清单文件中删除它。
<uses-permission android:name="android.permission.CAMERA"/>
为什么?
正在启动Android M(API 23),如果您的应用程序已在清单中声明CAMERA权限,那么,它需要一个摄像头权限才能被授予访问ACTION_IMAGE_CAPTURE等等......太(通常不需要CAMERA允许他们自己的)。 如果没有,那么它会自动引发SecurityException 。
╔═════════════════════════════════════════════════╦════════════════════╗
║ Usage ║ Permissions needed ║
╠═════════════════════════════════════════════════╬════════════════════╣
║ ACTION_IMAGE_CAPTURE ║ none ║
║ ACTION_VIDEO_CAPTURE ║ none ║
║ INTENT_ACTION_STILL_IMAGE_CAMERA ║ none ║
║ android.hardware.camera2 ║ CAMERA ║
║ android.hardware.camera2 + ACTION_IMAGE_CAPTURE ║ CAMERA ║
║ android.hardware.camera2 + ACTION_VIDEO_CAPTURE ║ CAMERA ║
║ ... ║ ... ║
╚═════════════════════════════════════════════════╩════════════════════╝
上表仅适用于 API 23+
tl;dr 怎么办?
选项 1 -如果您只使用ACTION_IMAGE_CAPTURE
等...
从清单中删除CAMERA
权限,你会没事的
选项 2 -如果您使用其他CAMERA
功能:
在运行时检查CAMERA
权限,只有在权限可用时才启动意图
嗨疯子aldebaran,
首先,您需要在 manifest.xml 文件中添加以下权限。
<uses-permission android:name="android.permission.CAMERA" />
检查android设备是否是Marshmallow。 如果是 android M 或更高版本,则使用以下代码动态获取相机权限。
在android M 之前不想获得动态权限。
检查用户是否授予权限。 如果用户未授予权限,则请求相机权限访问。
private static final int MY_CAMERA_REQUEST_CODE = 100;
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();
}
}
撤消权限....简单地说是您再次调用了权限,因此无需在清单文件中再次为相机写入权限......
相反,您只需....需要写两行....到 READ 和 Write External Storage 这足以运行您的程序它足以运行您的程序
您应该使用AppCompatActivity
而不是扩展您的 MainActivity。 还请包括堆栈跟踪。
public class MainActivity extends AppCompatActivity {
//......
}
哦对不起。 使用堆栈跟踪可以清楚地看到主要问题。 android.permission.CAMERA
。 为了提出请求,您应该创建权限检查。 请检查此示例以创建权限检查。
例子:
1) 包含到活动中。
<uses-permission android:name="android.permission.CAMERA" />
2)确保您向用户请求权限:
if ( ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) {
ActivityCompat.requestPermissions( this, new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION },
LocationService.MY_PERMISSION_ACCESS_COURSE_LOCATION );
}
3) 签入运行时
if ( Build.VERSION.SDK_INT >= 23 &&
ContextCompat.checkSelfPermission( context, android.Manifest.permission.CAMERA ) != PackageManager.PERMISSION_GRANTED) {
return;
}
我有类似的问题,但看起来 Android 有一个错误。 当您向 AndroidManifest 添加相机权限时
<uses-permission android:name="android.permission.CAMERA" />
即使您想使用外部应用程序拍照,您也必须为其授予权限。 从清单中删除它已经解决了SecurityException 的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.