安卓获取已创建的悬浮窗集合

WindowManager.addView(View,WindowManager.LayoutParams);
获取addView后的List集合

try {
            Class<?> wmGlobalClz = Class.forName("android.view.WindowManagerGlobal");
            Method getInstanceMethod = wmGlobalClz.getMethod("getInstance");
            Object mGlobal = getInstanceMethod.invoke(null);
            //private final ArrayList<View> mViews = new ArrayList<View>();
            Field mViewsField = wmGlobalClz.getDeclaredField("mViews");
            mViewsField.setAccessible(true);
            ArrayList<View> mViews = (ArrayList<View>) mViewsField.get(mGlobal);

            //private final ArrayList<ViewRootImpl> mRoots = new ArrayList<ViewRootImpl>();
            Field mRootsField = wmGlobalClz.getDeclaredField("mRoots");
            mRootsField.setAccessible(true);
            ArrayList<?> mRoots = (ArrayList<?>) mRootsField.get(mGlobal);

            //private final ArrayList<WindowManager.LayoutParams> mParams = new ArrayList<WindowManager.LayoutParams>();
            Field mParamsField = wmGlobalClz.getDeclaredField("mParams");
            mParamsField.setAccessible(true);
            ArrayList<WindowManager.LayoutParams> mParams = (ArrayList<WindowManager.LayoutParams>) mParamsField.get(mGlobal);

            //private final ArraySet<View> mDyingViews = new ArraySet<View>();
            //java.util.ArraySet
            @SuppressLint("SoonBlockedPrivateApi")
            Field mDyingViewsField = wmGlobalClz.getDeclaredField("mDyingViews");
            mDyingViewsField.setAccessible(true);
            Object mDyingViews = mParamsField.get(mGlobal);

            for(View view : mViews){
                Log.d("Test",view.getClass().getName());
            }
            for(WindowManager.LayoutParams param : mParams){
                Log.d("Test",param.toString()+"----"+param.getTitle());
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'小五'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值