我收到错误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
谁能帮助我?
答案 0 :(得分:30)
这是我解决此问题的方法。
与大多数其他答案相反,请从清单文件中删除它。
<uses-permission android:name="android.permission.CAMERA"/>
为什么?
启动Android M(API 23),如果您的应用具有在清单中声明的 CAMERA 权限,则需要该 CAMERA 权限被 GRANTED < / em>以便访问 ACTION_IMAGE_CAPTURE 等等...(通常不需要本身的 CAMERA 权限)。如果不是,那么它将自动引发 SecurityException 。
那该怎么办?
选项1-如果仅需要 ACTION_IMAGE_CAPTURE 等。
从清单中删除CAMERA权限就可以了
选项2-如果您还需要 CAMERA 权限
在运行时检查CAMERA权限,并仅在该权限可用时启动意图
答案 1 :(得分:9)
你好lunatique 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();
}
}
答案 2 :(得分:0)
您应该使用AppCompatActivity
来扩展您的MainActivity。还请,包括stacktrace。
public class MainActivity extends AppCompatActivity {
//......
}
哦,抱歉。有了堆栈跟踪,它显然是主要问题。 android.permission.CAMERA
。要进行请求,您应该创建权限检查。请检查This Example,以创建权限检查。
示例:强>
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)签入RunTime
if ( Build.VERSION.SDK_INT >= 23 &&
ContextCompat.checkSelfPermission( context, android.Manifest.permission.CAMERA ) != PackageManager.PERMISSION_GRANTED) {
return;
}
答案 3 :(得分:0)
撤销权限....它只是说你已经再次调用了权限,所以不需要在Manifest文件中再次为Camera写权限......
相反,你只需......编写两行......来读取和写入外部存储,足以运行你的程序 它足以运行你的程序
答案 4 :(得分:0)
我有类似的问题,但似乎Android出现了此错误。当您将相机权限添加到AndroidManifest
<uses-permission android:name="android.permission.CAMERA" />
即使您想使用外部应用程序拍照也必须授予权限。从清单中删除它可以解决 SecurityException 的问题。