为什么应用程序看不到 Camera2API 权限?
Why app doesn't see permission Camera2API?
我有一个很大的问题(
我正在使用 Camera2API 并使用标准 Google 示例。
Mystic就是我用这个方法的时候
private void openCamera(int width, int height) {
setUpCameraOutputs(width, height);
configureTransform(width, height);
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
throw new RuntimeException("Time out waiting to lock camera opening.");
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (InterruptedException e) {
throw new RuntimeException("Interrupted while trying to lock camera opening.", e);
}
}
我用Samsung S6 android 6.0
我希望该方法 manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);
- 会打开摄像头,但不是这样,代码在
中停止
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
据我了解,这意味着我的清单不包含权限,但我检查了并且有适当的权限
<uses-permission android:name="android.permission.CAMERA" />
这是什么意思?
我有这个权限,为什么过不了关?
我尝试在 Meizu MX5 android 5.1
上启动这个应用程序,它打开了相机,一切正常...
可能是安卓版本的问题?
我做错了什么?我该如何检查?
在您的 Samsung 中转到您的:设置 -> 应用程序 -> "Your app" -> 权限;并手动设置权限。当您的目标 API 为 23 岁及以上时,就会发生这种情况。它会 运行 在较低版本上正常。如果你想让你的应用程序在 android 6.0 及更高版本上自动获得权限,请在你的 gradle
中将目标 API 更改为 22。另外,最好在你的应用程序中实现询问权限。
你说你使用的是 Android 6.0 对吗?
根据 this 即使您在清单中声明了权限,您也必须单独检查每个权限,如果没有被授予则请求每个权限。
为此,在 :
之后
if (ActivityCompat.checkSelfPermission(this,Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
而不是 return
,这样做,
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA},YOUR_INTEGER_CONSTANT_FOR_THE_CALLBACK);
并按照链接页面中的描述实现回调函数,
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case YOUR_INTEGER_CONSTANT_FOR_THE_CALLBACK: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG,"Granted");
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
Log.d(TAG,"Denied");
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
希望对您有所帮助。
我有一个很大的问题(
我正在使用 Camera2API 并使用标准 Google 示例。
Mystic就是我用这个方法的时候
private void openCamera(int width, int height) {
setUpCameraOutputs(width, height);
configureTransform(width, height);
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
throw new RuntimeException("Time out waiting to lock camera opening.");
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (InterruptedException e) {
throw new RuntimeException("Interrupted while trying to lock camera opening.", e);
}
}
我用Samsung S6 android 6.0
我希望该方法 manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);
- 会打开摄像头,但不是这样,代码在
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
据我了解,这意味着我的清单不包含权限,但我检查了并且有适当的权限
<uses-permission android:name="android.permission.CAMERA" />
这是什么意思?
我有这个权限,为什么过不了关?
我尝试在 Meizu MX5 android 5.1
上启动这个应用程序,它打开了相机,一切正常...
可能是安卓版本的问题?
我做错了什么?我该如何检查?
在您的 Samsung 中转到您的:设置 -> 应用程序 -> "Your app" -> 权限;并手动设置权限。当您的目标 API 为 23 岁及以上时,就会发生这种情况。它会 运行 在较低版本上正常。如果你想让你的应用程序在 android 6.0 及更高版本上自动获得权限,请在你的 gradle
中将目标 API 更改为 22。另外,最好在你的应用程序中实现询问权限。
你说你使用的是 Android 6.0 对吗?
根据 this 即使您在清单中声明了权限,您也必须单独检查每个权限,如果没有被授予则请求每个权限。
为此,在 :
if (ActivityCompat.checkSelfPermission(this,Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
而不是 return
,这样做,
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA},YOUR_INTEGER_CONSTANT_FOR_THE_CALLBACK);
并按照链接页面中的描述实现回调函数,
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case YOUR_INTEGER_CONSTANT_FOR_THE_CALLBACK: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG,"Granted");
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
Log.d(TAG,"Denied");
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
希望对您有所帮助。