【发布时间】:2017-10-24 16:48:59
【问题描述】:
我一直在尝试弄清楚如何在 API 23+ 上正确设置 CAMERA 和 ACCESS_FINE_LOCATION 的 android 权限。
我的程序将请求CAMERA,但它不会在运行时请求ACCESS_FINE_LOCATION 权限。
我已阅读 permissions 和 location 开发人员页面,但我似乎无法掌握如何正确请求权限。我也通过stackoverflow查看了答案,但仍然不明白。
谁能解释我在代码中做错了什么,以及如何解决它?
我的代码:
private void connectCamera() {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) ==
PackageManager.PERMISSION_GRANTED) {
cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler);
} else {
if (shouldShowRequestPermissionRationale(android.Manifest.permission.CAMERA)) {
Toast.makeText(this,
"Video app required access to camera and location", Toast.LENGTH_SHORT).show();
}
requestPermissions(new String[]{android.Manifest.permission.CAMERA,
android.Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
}, REQUEST_CAMERA_PERMISSION_RESULT);
}
} else {
cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler);
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CAMERA_PERMISSION_RESULT) {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getApplicationContext(),
"Application will not run without camera and location services!", Toast.LENGTH_SHORT).show();
}
}
}
【问题讨论】:
-
你的问题解决了吗?
-
是的。谢谢您的帮助。您是否偶然知道 Androids Camera2 API?
-
不客气!知道一点,但是网上有很多教程和示例代码。如果您在查找问题时遇到问题,请随时提出新问题 :)