美文网首页
【Android】反射获取上层ActivityContext

【Android】反射获取上层ActivityContext

作者: renkuo | 来源:发表于2019-05-31 16:16 被阅读0次

获取结果有可能为null,所以使用的时候注意一下,做好非null判断

/**
     * 1、 获取ActivityThread中保存的所有的ActivityRecord
     * 2 、从ActivityRecord中获取状态不是pause的Activity并返回,这个Activity就是当前处于活动状态的Activity
     *
     * @return
     */
    public static Activity getTopActivityInstance() {
        Class activityThreadClass = null;
        try {
            activityThreadClass = Class.forName("android.app.ActivityThread");
            Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
            Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
            activitiesField.setAccessible(true);
            Map activities = (Map) activitiesField.get(activityThread);
            for (Object activityRecord : activities.values()) {
                Class activityRecordClass = activityRecord.getClass();
                Field pausedField = activityRecordClass.getDeclaredField("paused");
                pausedField.setAccessible(true);
                if (!pausedField.getBoolean(activityRecord)) {
                    Field activityField = activityRecordClass.getDeclaredField("activity");
                    activityField.setAccessible(true);
                    Activity activity = (Activity) activityField.get(activityRecord);
                    return activity;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        return null;
    }

错误不足之处或相关建议欢迎大家评论指出,谢谢!如果觉得内容可以的话麻烦喜欢(♥)一下

相关文章

  • 【Android】反射获取上层ActivityContext

    获取结果有可能为null,所以使用的时候注意一下,做好非null判断 错误不足之处或相关建议欢迎大家评论指出,谢谢...

  • 适配问题 双摄

    荣耀9 camera 获取相机问题副相机不对上层应用开放 如果必要可以查看源码 使用反射查找

  • 2020-07-04【反射】

    类加载 类加载器 反射概述 获取Class类的对象 反射获取构造方法并使用 反射获取成员遍历并使用 反射获取成员方...

  • Android版本6.0以上SD卡相关方法

    Android版本6.0以上SD卡相关方法(反射) 1. 概述 主要是获取SD外置存储卡的相关方法; 获取内置存储...

  • java 反射学习笔记(四)反射的基本操作和用法

    反射的基本操作和用法: 通过反射获取该类的属性;通过反射获取该类的方法;通过反射获取该类的构造方法; 在通过反射获...

  • 反射

    实体类 反射获取实例 反射获取方法 反射获取属性 补充 testBean.getClasses()返回调用类的所有...

  • Android-注解

    java注解在 Android 中有两种应用方式,一种方式是基于反射的,在程序的运行期间获取类信息进行反射调用;另...

  • java基础-反射

    知识点 反射的基本概念 反射中class类的获取 反射中field类属性的获取 反射中method类方法的获取 反...

  • 一份反射go reflect的API练习以及其坑点

    主要内容: 由对象获取反射类型,由对象获取反射值 由反射值获取反射类型 反射值重新转换成对象 遍历字段 遍历方法 ...

  • java 反射

    什么是反射 反射的作用 反射的应用场景 获取Class对象 获取属性 5.获取方法 6.获取构造 7.创建对象 8...

网友评论

      本文标题:【Android】反射获取上层ActivityContext

      本文链接:https://www.haomeiwen.com/subject/fhpoaqtx.html