您好,我有一个使用相机的简单应用程序,因此用户必须授予相机权限。
到目前为止,我的应用只有Activity
,但现在我想使用Fragments
。
我弄碎了一个叫做FragmentScanCode
的片段(这里我想使用相机)。
这也是第一个片段,因此我想在应用程序启动时授予权限。
MainActivity
中有我的代码,它工作正常。
final int RequestCameraPermissionID = 1001;
onRequestPermissionsResult
:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case RequestCameraPermissionID: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CAMERA},
RequestCameraPermissionID);
//return;
}
try {
cameraSource.start(cameraView.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
}
}
break;
}
}
由于Fragment
,我无法在ActivityCompat
中使用它。
是否有可能授予片段权限的解决方案?
这是我根据developer.google.com文档尝试过的方法,并且有效
这是我的有效代码。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
switch (requestCode){
case RequestCameraPermissionID: {
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
if(getActivity().checkSelfPermission(Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
requestPermissions(
new String[]{Manifest.permission.CAMERA},
RequestCameraPermissionID);
//cameraSource.start(cameraView.getHolder());
return;
}
}
captureCode();
}
break;
}
}
以及我的函数captureCode()
try {
if (getActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(
new String[]{Manifest.permission.CAMERA},
RequestCameraPermissionID);
return;
}
cameraSource.start(cameraView.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:0)
此行为似乎出现在Fragment的v4 Fragment支持类requestPermissions中。对于希望使用本机类以及API级别在11到23之间的扩展功能的用户,存在Activity / FragmentCompat实现。check this out