首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android onRequestPermissionsResult仅在Activity上调用,而在Fragment上不调用

Android的onRequestPermissionsResult方法是用于处理权限请求结果的回调方法。它在用户对权限请求进行操作后被调用,以便开发者可以根据用户的操作结果进行相应的处理。

在Activity中,当权限请求的结果返回时,系统会自动调用Activity的onRequestPermissionsResult方法,并将结果传递给该方法。开发者可以在该方法中根据不同的权限请求结果进行相应的处理,例如授权成功后继续执行相关操作,授权失败则给出相应的提示信息。

然而,在Fragment中,onRequestPermissionsResult方法并不会自动调用。这是因为Fragment本身并没有直接处理权限请求的能力,权限请求的操作仍然需要在宿主Activity中进行。因此,在Fragment中处理权限请求的结果时,需要将结果传递给宿主Activity,并由宿主Activity的onRequestPermissionsResult方法进行处理。

为了在Fragment中处理权限请求结果,可以通过以下步骤实现:

  1. 在Fragment中定义一个接口,用于将权限请求结果传递给宿主Activity。例如:
代码语言:java
复制
public interface OnPermissionResultListener {
    void onPermissionResult(int requestCode, String[] permissions, int[] grantResults);
}
  1. 在Fragment中调用宿主Activity的requestPermissions方法进行权限请求,并将权限请求结果传递给宿主Activity。例如:
代码语言:java
复制
public class MyFragment extends Fragment {
    private OnPermissionResultListener mListener;

    // ...

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnPermissionResultListener) {
            mListener = (OnPermissionResultListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnPermissionResultListener");
        }
    }

    public void requestPermissions(String[] permissions, int requestCode) {
        // 请求权限
        ActivityCompat.requestPermissions(getActivity(), permissions, requestCode);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        mListener.onPermissionResult(requestCode, permissions, grantResults);
    }
}
  1. 在宿主Activity中实现OnPermissionResultListener接口,并在onPermissionResult方法中处理权限请求结果。例如:
代码语言:java
复制
public class MainActivity extends AppCompatActivity implements MyFragment.OnPermissionResultListener {

    // ...

    @Override
    public void onPermissionResult(int requestCode, String[] permissions, int[] grantResults) {
        // 处理权限请求结果
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 权限授权成功
                    // 继续执行相关操作
                } else {
                    // 权限授权失败
                    // 给出相应的提示信息
                }
                break;
            // 处理其他权限请求结果...
        }
    }
}

通过以上步骤,可以在Fragment中处理权限请求结果,并根据结果进行相应的操作。这种方式可以使代码更加模块化和可复用,提高开发效率。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

服务之间调用连接运维层面问题分析

服务之间调用连接运维层面问题分析 笔者: 张首富 时间: 20201118 晚 问题描述 1,20201118日上午清华反应 callout 服务调用 robot 服务失败;网络-赵晨排查从网络层面排查并没有重传...,丢包现象; 2,20201118日下午李刚反应 auth 等多个 java 服务连不上数据库,连不上数据库的 java 服务都是部署在同一台机器; 过程分析 上面两个问题其实是有相同点的,相同点就是服务之间的调用不能正常通信...(好像是废话),相同的地方就是都去连接服务端固定的一个端口; 通过监控平台分析发下,在发生问题的时间点,出问题的两台客户端机器的TCP_timeout都过多,cpu 内存磁盘等指标都趋于正常。...当 tcp timeout 过的时候造成新的连接连接,所以出现连接失败的情况;还请排查为什么会出现那么多 timeout建议检查分析代码

69030

Android技能树 — Fragment总体小结

2.1 FragmentManager相关 1. getFragmentManager(): 获取Fragment父容器的管理器,但是现在该方法在Activity中已经被标记推荐使用了。...推荐使用的方法(毕竟可以兼容Android所有版本) 3. getChildFragmentManager(): 我们提过,Fragment更像是一个“子Activity”,那你说"子Activity"...等情况下,系统会调用onSaveInstanceState()帮你保存当前Activity的状态、数据等,直到再回到该Activity之前(onResume()之前),你执行Fragment事务,就会抛出该异常...答案是可以的,但是推荐。...原因:我们可以知道Activity重新创建时,会重新构建它所管理的Fragment,原先的Fragment的字段值将会全部丢失(因为当切换横竖屏时,Fragment调用自己的无参构造函数,那么在构造函数传参就会失效

1.1K20
  • Android技能树 — Fragment总体小结

    2.1 FragmentManager相关 1. getFragmentManager(): 获取Fragment父容器的管理器,但是现在该方法在Activity中已经被标记推荐使用了。...推荐使用的方法(毕竟可以兼容Android所有版本) 3. getChildFragmentManager(): 我们提过,Fragment更像是一个“子Activity”,那你说"子Activity"...等情况下,系统会调用onSaveInstanceState()帮你保存当前Activity的状态、数据等,直到再回到该Activity之前(onResume()之前),你执行Fragment事务,就会抛出该异常...答案是可以的,但是推荐。...原因:我们可以知道Activity重新创建时,会重新构建它所管理的Fragment,原先的Fragment的字段值将会全部丢失(因为当切换横竖屏时,Fragment调用自己的无参构造函数,那么在构造函数传参就会失效

    25110

    如何优雅地申请Android运行时权限

    因为是在你实现的方法加注解来请求权限,所以代码相对要简洁一些,我们基本要使用到以下几个注解。 ?...同样,在写完申请完权限后执行的方法后,同样要在ActivityonRequestPermissionsResult中注册回调。...假如我封装了一个获取定位的接口,这是一个独立的方法,一般来说会写在LocationUtils.java中,而且任何人任何类类都可能调用我的方法,这就导致LocationUtils是没有Activity去接收...所以,在应用中,我可以加载一个Fragment(和RxPermissions思路类似),在fragment中申请权限,onRequestPermissionsResult回调也放在这个fragment中...这样我在任何位置,只要有Activity存在,都可以加载这个fragment去请求权限,请求完成后再移除这个fragment

    3.3K20

    Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用

    注解 需要 描述 @RuntimePermissions ✓ 在Activity或者Fragment中需要添加,来处理权限的问题 @NeedsPermission ✓ 注释其执行需要一个或多个许可的作用的方法...它通过在一个PermissionRequest可用于继续或中止在用户输入的当前的许可请求对象 @OnPermissionDenied 注释这是调用的方法,如果用户授予的权限 @OnNeverAskAgain...:name="android.permission.CAMERA" /> 二、在Activity中添加注解 @RuntimePermissions public class MainActivity extends...要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。要请求权限,请调用新增的 requestPermissions() 方法。...PermissionsDispatcherDemo 参考文档:http://blog.csdn.net/lmj623565791/article/details/50709663 补充 现在网上不少关于权限的库,可以直接用的,在GitHub搜索即可

    1.5K50

    Android Fragment 的妙用 - 优雅地申请权限和处理 onActivityResult

    ---- Fragment 封装权限申请 Android 6.0 动态权限机制,大家再熟悉不过了,如果我们没有对其进行封装,那我们每一次在申请权限的时候,大概需要以下几步: 这里我们已拨打电话为例子进行讲解...当我们申请权限申请的时候,先查找我们当前 Activity 是否存在代理 fragment,不存在,进行添加,并使用代理 Fragment 进行申请权限 第二步:在代理 FragmentonRequestPermissionsResult...第三步:调用 Fragment 的 requestPermissions 方法进行权限申请 然后看 onRequestPermissionsResult 方法 这里我们主要关注 handleEachPermissionCallBack...但实际,这种方式会存在一些局限 onActivityResult 必须在原始 Activity 中才能接收,如果想在非 Activity调用startActivityForResult,那么调用和接收的地方就不在同一个地方了...你呢, Fragment 的妙用你还知道哪些,欢迎留言评论。 Android 技术人,一位不羁的码农,撩天撩地撩技术,期待你的参与。

    2.1K30

    一个类快速实现 Android 6.0 运行时权限适配

    前言 现在来谈 Android 6.0 运行时权限适配,可以说是很过时了,可是为什么还要写呢?...二是看了下目前国内主流的应用,发现很多都还没有适配 Android 6.0 ,因此觉得这篇文章还有它的意义。...使用 既然上面说到了易用性,那我们先来看看使用方法 在需要申请权限的地方调用 PermissionReq.with(this) // Activity or Fragment .permissions...基类和 Fragment 基类中添加以下代码 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String...RequestCode 终于浮出水面 我们在内部使用一个静态自增的 AtomicInteger 作为 RequestCode ,保证 RequestCode 不会重复,使用 AtomicInteger 而直接使用

    27220

    Android动态权限申请(Kotlin版)

    Android6.0之后,APP有些用到的权限需要动态申请,虽然这个功能已经出来好久了,但一直没有研究过,只知道用法简单,到时候copy一下就好了,github也有许多开源的框架供大家使用。...Android动态权限申请 Android6.0之后,权限级别分为正常权限和危险权限: 正常权限对用户隐私或其他应用操作风险较小,只需要在应用声明中声明即可使用。...Fragment中实现,不需要用户再去调用,不过我总是觉得这样做对android性能优化不是很好,源码如下: private RxPermissionsFragment getRxPermissionsFragment...(Activity activity) { RxPermissionsFragment rxPermissionsFragment = findRxPermissionsFragment(activity...实现onRequestPermissionsResult回调: override fun onRequestPermissionsResult(requestCode: Int, permissions

    4.2K20

    Android调用系统摄像头拍照并显示在ImageView

    简介 现在市面上的apk只要涉及用户中心都会有头像,而且这个头像也是可自定义的,有的会采取读取相册选择其中一张作为需求照片,另一种就是调用系统摄像头拍照并获取即时照片,本博文就是讲述如何调用摄像头拍照并显示在指定的控件...实现起来比较简单: activity_main.xml <?xml version="1.0" encoding="utf-8"?...Bitmap photo = (Bitmap) data.getExtras().get("data"); imageIV.setImageBitmap(photo); } } } 我们来分析下activity...和Zelezny,点击事件触发后调用系统的action开启摄像头拍照界面,在这里面我们要注意startActivityForResult必须使用这个方法来回调,第一个参数为intent,第二个参数为自定义的...博文内容比较简单,但很实用,积跬步无以至千里,希望对需要的朋友有一定的帮助。 完整的参考代码 以上就是本文的全部内容,希望对大家的学习有所帮助。

    2.3K20

    Android M 权限最佳实践

    前言 Google在Android 6.0 开始原生支持应用权限管理,再不是安装应用时的一刀切。权限管理虽然很大程度上增加了用户的可操作性,但是却苦了广大Android开发者。...最佳实践 上面的解决方案是可行的,但是每次申请权限需要依赖于一次调用shouldShowRequestPermissionRationale( )方法的返回值,如果SharedPreferences被修改或者被删除...EasyPermissions并没有存储一次shouldShowRequestPermissionRationale( )的返回值,而是在申请权限被拒后调用shouldShowRequestPermissionRationale...具体见PermissionBestPractice 将通用的操作转移到BaseActivity和BaseFragment中 每个Activity或者Fragment都需要覆写onRequestPermissionsResult...或者Fragment只需做很小的修改就可以实现6.0的权限管理了 // 1.

    1.3K91
    领券