android - 在“androidx.fragment.app.Fragment”中请求权限和onRequestPermissionResult
问题描述
我是android的初学者,希望有任何帮助。
基本上在androidx.fragment.app.Fragment
调用之后requestPermissions()
,onRequestPermissionsResult()
从不调用。
我阅读了另一个问题(如果在片段和活动中都定义了 onRequestPermissionsResult ,则不会在片段中调用),这ActivityCompat.requestPermissions
将导致onRequestPermissionsResult
调用活动的方法。并且简单requestPermissions
会调用onRequestPermissionsResult
相同的片段。我已经尝试了两种方法,但是每次调用活动的方法时,我想可能是因为这不是 v4 支持片段,而是androidx.fragment.app.Fragment
.
我尝试onRequestPermissionsResult
在活动中覆盖并调用 super 的方法,但仍然没有调用片段的方法。
private final String[] REQUIRED_PERMISSIONS = new String[]{"android.permission.CAMERA", "android.permission.WRITE_EXTERNAL_STORAGE"};
private int REQUEST_CODE_PERMISSIONS = 10;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setupTimeOut();
if (allPermissionsGranted()) {
// Do stuff that requires permission
} else {
requestPermissions(REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CODE_PERMISSIONS) {
if (allPermissionsGranted()) {
// Do stuff that requires permission
} else {
Toast.makeText(getViewContext(), "Permissions not granted", Toast.LENGTH_SHORT).show();
}
}
}
private boolean allPermissionsGranted() {
//check if req permissions have been granted
for (String permission : REQUIRED_PERMISSIONS) {
if (ContextCompat.checkSelfPermission(getViewContext(), permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
我想要的是在同一个片段中获得权限结果回调。
如果这是相关的,权限是针对相机和写入外部存储的,片段是一个简单的照片捕捉片段。
解决方案
推荐阅读
- dart - 当只有屏幕的某些部分可滚动时如何修复底部溢出
- wpf - 如何在 wpf 的 navigationservice.navigate() 中使用相同的视图实例
- c# - 访问 WCF (C#) 中的当前服务证书
- docker - 尝试远程连接到 InfluxDB 时出现 502 网关错误
- node.js - 一个id只更新
- c# - Dapper Query() 返回多个相同的列
- perl - 在 Perl 中复制文件时需要显示进度条
- javascript - 使用 jQuery 更改 data-src 值不起作用
- java - 可以在 injectMocks 之前设置模拟对象的属性
- jquery - 如何使用 jquery 将数据插入 SQL 数据库