我一直在努力弄清楚如何在API 23 +上正确设置ACCESS_FINE_LOCATION
和CAMERA
的Android权限。
我的程序将请求ACCESS_FINE_LOCATION
,但它不会在运行时请求 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();
}
}
}
权限。
我已阅读permissions和location个开发者页面,但我似乎无法掌握如何正确请求权限。我也查看了stackoverflow的答案,但仍然不明白。
有人能够在我的代码中解释我做错了什么,以及如何解决它?
我的代码:
SELECT table1.Item_Id,Group_Concat(t3.category_name separator ',') as Category_Name
FROM table1
INNER JOIN table2
ON table1.item_id = table2.item_id
INNER JOIN table3
ON table2.category=table3.category_id
Group by table1.Item_Id;
答案 0 :(得分:2)
您并未在您提供的代码中的任何位置请求权限。要询问位置功能,您可以尝试以下示例:
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_CODE_FINE_GPS);
此外,一旦用户授予使用此功能的权限,您就不会打开相机。
在onRequestPermissionsResult()
方法中,您应添加else
来电openCamera
。
这样的事情:
@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();
}
else {
cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler);
}
}
}
验证步骤大致如下:
onRequestPermissionsResult()
方法上。你必须在那里处理用户输入。如果他没有给予许可,并且此功能对于您的应用程序运行至关重要,显示对话框或其他解释为什么他应该给您许可,并再次询问。看看this answer。那家伙创建了一个很好的帮助方法来检查并询问您可能需要的任何数量的权限。然后,您只需要在onRequestPermissionsResult()
上处理它们。
PS:我强烈建议您重新阅读the docs如何申请API 23+的权限,您的问题表明您没有&#39 ;了解权限请求的基本概念。另外,请检查Android培训页面的this link和this related question。