博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[报错]token null is not valid is your activity running
阅读量:4147 次
发布时间:2019-05-25

本文共 4074 字,大约阅读时间需要 13 分钟。

1.异常日志

我的这个报错,和网上的报错,所依附的 activity 不太一样,之前还延时创建 悬浮窗,但是没用。

01-04 07:04:25.319 30523-30523/com.fadisu.cpurun E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.fadisu.cpurun, PID: 30523android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?   at android.view.ViewRootImpl.setView(ViewRootImpl.java:783)   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:359)   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)   at com.fadisu.cpurun.fragment.CpuStatusFragment.showFloatWindow(CpuStatusFragment.java:260)   at com.fadisu.cpurun.fragment.CpuStatusFragment.onClick(CpuStatusFragment.java:210)   at android.view.View.performClick(View.java:6300)   at android.view.View$PerformClick.run(View.java:24941)   at android.os.Handler.handleCallback(Handler.java:790)   at android.os.Handler.dispatchMessage(Handler.java:99)   at android.os.Looper.loop(Looper.java:164)   at android.app.ActivityThread.main(ActivityThread.java:6523)   at java.lang.reflect.Method.invoke(Native Method)   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)

2.代码片段

mParams.type = WindowManager.LayoutParams.TYPE_TOAST; 这句出问题了

改成

mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

就好了,可是想要达到不需要权限申请的悬浮窗啊?,如何两全其美

private void showFloatWindow() {        mResultTv = new TextView(mContext);        mResultTv.setBackgroundColor(mContext.getColor(R.color.float_bg));        mResultTv.setTextColor(mContext.getColor(R.color.white));        mResultTv.setOnTouchListener(new View.OnTouchListener() {            int lastX = 0;            int lastY = 0;            int paramX = 0;            int paramY = 0;            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                switch (motionEvent.getAction()) {                    case MotionEvent.ACTION_DOWN:                        lastX = (int) motionEvent.getRawX();                        lastY = (int) motionEvent.getRawY();                        paramX = mParams.x;                        paramY = mParams.y;                        break;                    case MotionEvent.ACTION_MOVE:                        int dx = (int) motionEvent.getRawX() - lastX;                        int dy = (int) motionEvent.getRawY() - lastY;                        mParams.x = paramX + dx;                        mParams.y = paramY + dy;                        // update float window                        mWm.updateViewLayout(mResultTv, mParams);                        break;                }                return true;            }        });        mParams = new WindowManager.LayoutParams();        mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;        mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;        // 悬浮窗的核心        mParams.type = WindowManager.LayoutParams.TYPE_TOAST;        // 设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作)        mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;        mParams.format = PixelFormat.TRANSPARENT;        mWm.addView(mResultTv, mParams);    }    private void hideFloatWindow() {        mWm.removeView(mResultTv);    }

so,还需要只加权限

private static final int REQUEST_CODE = 1;    //判断权限    private boolean isCanDrawOverlays(Context context) {        Boolean result = true;        if (Build.VERSION.SDK_INT >= 23) {            try {                Class clazz = Settings.class;                Method canDrawOverlays = clazz.getDeclaredMethod("canDrawOverlays", Context.class);                result = (Boolean) canDrawOverlays.invoke(null, context);            } catch (Exception e) {                e.printStackTrace();            }        }        return result;    }    //申请权限    private void requestAlertWindowPermission() {        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);        intent.setData(Uri.parse("package:" + mContext.getPackageName()));        startActivityForResult(intent, REQUEST_CODE);    }

AndroidManifest.xml

转载地址:http://rlcti.baihongyu.com/

你可能感兴趣的文章
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>