Android 创建一个悬浮窗口

1.添加悬浮窗口的代码如下:



遇到的问题:

1.用AS编译后,安装到vivo手机后,出现如下的错误:

04-15 21:53:57.256 27704 27704 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.administrator.windowmanagedemo.MyApp" on path: DexPathList[[zip file "/data/app/com.example.administrator.windowmanagedemo-eQkmQmV2JR7llpxeuWp8OA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.administrator.windowmanagedemo-eQkmQmV2JR7llpxeuWp8OA==/lib/arm64, /system/lib64]]
04-15 21:53:57.256 27704 27704 E AndroidRuntime:     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
04-15 21:53:57.256 27704 27704 E AndroidRuntime:     at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
04-15 21:53:57.256 27704 27704 E AndroidRuntime:     at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
04-15 21:53:57.256 27704 27704 E AndroidRuntime:     at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
04-15 21:53:57.256 27704 27704 E AndroidRuntime:     at android.app.Instrumentation.newApplication(Instrumentation.java:1120)
04-15 21:53:57.256 27704 27704 E AndroidRuntime:     at android.app.LoadedApk.makeApplication(LoadedApk.java:1077)
04-15 21:53:57.256 27704 27704 E AndroidRuntime:     ... 9 more
04-15 21:53:57.259  1115  1626 I am_crash: [27704,0,com.example.administrator.windowmanagedemo,820559686,java.lang.ClassNotFoundException,Didn't find class "com.example.administrator.windowmanagedemo.MyApp" on path: DexPathList[[zip file "/data/app/com.example.administrator.windowmanagedemo-eQkmQmV2JR7llpxeuWp8OA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.administrator.windowmanagedemo-eQkmQmV2JR7llpxeuWp8OA==/lib/arm64, /system/lib64]],BaseDexClassLoader.java,134]

无法加载到MyApp,但是此类已经存在,而且编译后也存在,通过设置AS的setting解决:

Android 创建一个悬浮窗口

2.点击悬浮窗出现停止运行:

把type设置为:TYPE_TOAST,出现如下错误:token不正确

04-16 21:05:06.208  1115  2044 W WindowManager: Attempted to add a toast window with unknown token null.  Aborting.
04-16 21:05:06.208 19247 19247 D AndroidRuntime: Shutting down VM
04-16 21:05:06.210 19247 19247 E AndroidRuntime: FATAL EXCEPTION: main
04-16 21:05:06.210 19247 19247 E AndroidRuntime: Process: com.example.administrator.windowmanagedemo, PID: 19247
04-16 21:05:06.210 19247 19247 E AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.view.ViewRootImpl.setView(ViewRootImpl.java:821)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:381)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at com.example.administrator.windowmanagedemo.SuspensionWindowUtil.showSuspensionView(SuspensionWindowUtil.java:51)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at com.example.administrator.windowmanagedemo.MainActivity.onBtnShowClicked(MainActivity.java:29)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at com.example.administrator.windowmanagedemo.MainActivity_ViewBinding$1.doClick(MainActivity_ViewBinding.java:35)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.view.View.performClick(View.java:6643)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.view.View.performClickInternal(View.java:6616)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.view.View.access$3100(View.java:792)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.view.View$PerformClick.run(View.java:26340)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:873)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.os.Looper.loop(Looper.java:224)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:7060)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:536)
04-16 21:05:06.210 19247 19247 E AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:928)
04-16 21:05:06.211  1115  2044 I am_crash: [19247,0,com.example.administrator.windowmanagedemo,818462534,android.view.WindowManager$BadTokenException,Unable to add window -- token null is not valid; is your activity running?,ViewRootImpl.java,821]

 

3.忘了在自定义的view中添加init()方法,导致没有加载进去自定义添加一张图片,结果点击按钮没有弹出window

利用Bitmap

private  void init() {
    Bitmap bp = BitmapFactory.decodeResource(getResources(),R.drawable.katou);
    width = ScreenSizeUtil.dp2px( 77.7f);
    height = width;
    bitmap = Bitmap.createScaledBitmap(bp,width,height,true);
}