您好,我有一个使用相机的简单应用程序,因此用户必须授予相机权限。
到目前为止,我的应用程序只有 Activity
,但现在我想使用 Fragments
。
我得到了一个叫做 FragmentScanCode
的 fragment (我想在这里使用相机)。
这也是第一个 fragment ,所以我想在应用程序开始时授予权限。
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
。
是否有任何可能的解决方案来授予 fragment 权限?
这是我根据 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();
}
最佳答案
这种行为似乎存在于 Fragment 的 v4 Fragment 支持类 requestPermissions 中。 Activity/FragmentCompat 实现适用于希望在 API 级别 11 到 23 上使用具有扩展功能的 native 类的人。check this out
关于java - 如何在 Fragment 中授予相机权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914472/