zoukankan      html  css  js  c++  java
  • 安卓开发 Fragment中重写onRequestPermissionsResult() 没有被调用 执行

    在Fragment类中重写onRequestPermissionsResult(),发现在权限申请后该方法没有被执行。

    • 重现:

    修改前代码

    @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                                 @Nullable Bundle savedInstanceState) {
    
                Toast.makeText(getActivity(),"需要授予必要的权限才能继续运行",Toast.LENGTH_LONG).show();
                ActivityCompat.requestPermissions(this.getActivity(), PERMISSIONS, REQUEST_CODE_PERMISSIONS);
        }
    
    @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if (allPermissionsGranted()) {
                startCamera(getContext());
            } else {
                Toast.makeText(getActivity(),"需要授予必要的权限才能继续运行",Toast.LENGTH_LONG).show();
                ActivityCompat.requestPermissions(getActivity(), PERMISSIONS, REQUEST_CODE_PERMISSIONS);
            }
        }
    
    • 原因:
      在Fragment中使用ActivityCompat.requestPermissions,只会去调用宿主Activity的onRequestPermissionsResult,而没有调用Fragment的该方法。

    • 解决(正确的权限申请姿势):
      使用requestPermissions方法即可,该方法是Fragment的类方法,这个方法才会去回调Fragment的onRequestPermissionsResult

    修改后代码

    @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                                 @Nullable Bundle savedInstanceState) {
    
                Toast.makeText(getActivity(),"需要授予必要的权限才能继续运行",Toast.LENGTH_LONG).show();
                requestPermissions(PERMISSIONS, REQUEST_CODE_PERMISSIONS);
        }
    
    @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if (allPermissionsGranted()) {
                startCamera(getContext());
            } else {
                Toast.makeText(getActivity(),"需要授予必要的权限才能继续运行",Toast.LENGTH_LONG).show();
                requestPermissions(PERMISSIONS, REQUEST_CODE_PERMISSIONS);
            }
        }
    
  • 相关阅读:
    〖Linux〗zigbee实验之cc2430移植tinyos2.x的步骤(Ubuntu13.10)
    〖Linux〗clang3.4的编译与安装
    〖Linux〗打开qtcreater出现错误的解决方法
    〖Linux〗gvim使用alt+1,2,3..进行标签页切换
    〖Linux〗Ubuntu13.10 安装qt开发环境
    c#, 输出二进制
    unity shader在小米2s上的问题
    unity, animtion倒放
    反射矩阵(reflection matrix)推导
    unity, 用unity profiler进行真机profile,需要退出360
  • 原文地址:https://www.cnblogs.com/xiaojiluben/p/14364979.html
Copyright © 2011-2022 走看看