yhaolpz / floatwindow Goto Github PK
View Code? Open in Web Editor NEWAndorid 任意界面悬浮窗,实现悬浮窗如此简单
Home Page: https://www.jianshu.com/p/18cbc862ba7b
License: Apache License 2.0
Andorid 任意界面悬浮窗,实现悬浮窗如此简单
Home Page: https://www.jianshu.com/p/18cbc862ba7b
License: Apache License 2.0
建议多试试华为,OPPO,VIVO. 兴许这句话就不会这样讲了~ BTW,欢迎体验PP助手 或者 最新UC浏览器体验 7.0及以下全平台机型无需权限显示悬浮窗效果。
主要修复oppo不能全局展示悬浮窗的问题。
修复代码:
FloatPhone 的方法 init中
判断MIUI出增加OPPO判断即可:
...
} else if (Miui.rom() || DeviceType.isOppo()) {
...
oppo判断方法如下:
查询build.prop是否有ro.build.version.opporom属性
申请加入维护组
怎样拖动的时候不触发点击事件?
library版本:compile 'com.github.yhaolpz:FloatWindow:1.0.8'
ImageView imageView = new ImageView(getApplicationContext());
imageView.setImageResource(R.mipmap.ic_launcher_round);
FloatWindow
.with(getApplicationContext())
.setView(imageView)
.setMoveType(MoveType.active)
.build();
在调用了上面的代码后,悬浮窗不显示。按Home键后再次回到自己的app就会显示悬浮窗。demo没有出现这样的问题,请问有人能知道大概是什么原因引起的么?
1.我用的是小米note android4.4系统测试,完全没有显示悬浮窗,手动打开权限也不行
2.vivo x9 android 7.0。第一次安装之后,显示一下就自动消失了,再次打开app又可以正常显示
晕
@OverRide
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 756232212) {
if (PermissionUtil.hasPermissionOnActivityResult(this)) {
mPermissionListener.onSuccess();
} else {
//这里应该是 mPermissionListener.onFail();
mPermissionListener.onSuccess();
}
}
finish();
}
代码中申请悬浮窗权限的回调错误,导致的直接问题是在申请悬浮窗权限的时候,用户选择了拒绝。应用崩溃
光有一个显示的但没有点击事件产生好像感觉有点没多大用处,可否设置点击事件监听?
建议加上这几个功能:
我想在service里弹出悬浮窗,就像这样,new了一个实例,然后去show,结果显示不了
mFloatWindow = new MyFloatWindow(this);
mFloatWindow.show();
必须要想demo那样,registerActivityLifecycleCallbacks监听,然后在回调里去show才行吗
在设置中也没有找到打开悬浮窗的权限.
自己添加setOnTouchListener()的话会覆盖手势响应
var con = layoutInflater.inflate(R.layout.view_alert, null)
var alert = FloatWindow
.with(getApplicationContext())
.setView(con)
.setDesktopShow(true)
.build()
con.setOnTouchListener { con, event ->
Log.d("ceshi", event.x.toString())
false
}
rt
RT
用baseactivity 显示一下就消失了,每次activity创建的时候和resume的时候显示一下就消失
在主界面 activity 里面初始化
FloatWindow
.with(getApplicationContext())
.setView(view)
.setWidth(Screen.width,0.2f)
.setHeight(Screen.width,0.2f)
.setX(Screen.width,0.7f)
.setY(Screen.height,0.2f)
.setMoveType(MoveType.back)
.setMoveStyle(300,null)
.setFilter(true,MainActivity.class)
.build();
FloatWindow.get().show();
如果是初始化的时候加载是没有问题 可以设置成按钮点击事件 就必须退到桌面 然后重进才会开启
现在没法判断悬浮窗是否有显示
RT
我发现手指滑动的时候,悬浮窗没有紧密跟随手指的位置,导致滑动幅度大和时间久了之后,最后手指停留的位置和悬浮窗显示的位置距离可以越来越大
8.0不给权限就崩溃了
FloatWindow
.with(getApplicationContext())
.setView(imageView)
.setDesktopShow(true) //默认 false
.build();
在界面上到按钮点击后,执行上述代码,然后屏幕上并没有显示悬浮窗,然后我点击home按键,回到桌面,也没有显示,然后我再次进入app到时候,这时候却出现了悬浮窗。
测试环境: 一加5T Android 8.1
java.lang.RuntimeException:Unable to resume activity {com.gipex.im/com.yhao.floatwindow.FloatActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=756232212, result=0, data=null} to activity {com.gipex.im/com.yhao.floatwindow.FloatActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.yhao.floatwindow.PermissionListener.onSuccess()' on a null object reference
2 android.app.ActivityThread.performResumeActivity(ActivityThread.java:3664)
3 ......
4 Caused by:
5 java.lang.NullPointerException:Attempt to invoke interface method 'void com.yhao.floatwindow.PermissionListener.onSuccess()' on a null object reference
6 com.yhao.floatwindow.FloatActivity.onActivityResult(FloatActivity.java:47)
7 android.app.Activity.dispatchActivityResult(Activity.java:7317)
8 android.app.ActivityThread.deliverResults(ActivityThread.java:4351)
9 android.app.ActivityThread.performResumeActivity(ActivityThread.java:3636)
10 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3704)
11 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2917)
12 android.app.ActivityThread.-wrap11(Unknown Source:0)
13 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1608)
14 android.os.Handler.dispatchMessage(Handler.java:105)
15 android.os.Looper.loop(Looper.java:164)
16 android.app.ActivityThread.main(ActivityThread.java:6665)
17 java.lang.reflect.Method.invoke(Native Method)
18 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
19 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
设备机型
小米 MI 6
系统版本
Android 8.0.0,level 26
在竖屏时开启悬浮按钮,切换方向后悬浮按钮的自动贴边会出错,自动贴边会贴在屏幕中间。
大概原因应该是转向后悬浮按钮的贴边坐标还是以左上角为原点,横坐标为手机宽度。但是横屏后横坐标应该是手机长度、
假如app是横屏的,一开始显示的位置就会不对了,而且,横屏一开始摄像头预览显示的方向还是竖屏的方向
我想问下,这个是不是4.4以下就不可以用,应为我们系统 目前兼容到4.0以上
你好:
博主:对于申请权限这块,小米手机就是个奇葩,需要用户手动去申请,但是其用户体验不好,有没能只能跳过申请权限的呢,特别是对于小米手机!
Process: com.example.yhao.fixedfloatwindow, PID: 2179
java.lang.RuntimeException: Unable to resume activity {com.example.yhao.fixedfloatwindow/com.example.yhao.floatwindow.A_Activity}: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@da7110b -- permission denied for window type 2002
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3645)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@da7110b -- permission denied for window type 2002
at android.view.ViewRootImpl.setView(ViewRootImpl.java:789)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:92)
at com.yhao.floatwindow.FloatPhone.init(FloatPhone.java:55)
at com.yhao.floatwindow.IFloatWindowImpl.show(IFloatWindowImpl.java:70)
at com.yhao.floatwindow.IFloatWindowImpl$1.onShow(IFloatWindowImpl.java:52)
at com.yhao.floatwindow.FloatLifecycle.onActivityResumed(FloatLifecycle.java:62)
at android.app.Application.dispatchActivityResumed(Application.java:216)
at android.app.Activity.onResume(Activity.java:1312)
at android.support.v4.app.FragmentActivity.onResume(FragmentActivity.java:437)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1354)
at android.app.Activity.performResume(Activity.java:7079)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3620)
魅族M5s flyme6 android6.0 经测试无法实现悬浮窗,也没有申请权限,如果从应用管理里面把悬浮窗权限打开,是可以实现悬浮窗操作的,希望能够适配,或者有申请权限也可,
在模拟器上,7.1会直接崩溃,真机不知道会怎么样?
我在一个activity中启动service添加悬浮窗后,setFilter设置的显示周期失效了,可能是activity计数的问题。本来是想实现收到后台推送后打开一个在应用内显示的视频悬浮窗
····有问题或者不满足需求也让人能改嘛,全是private蛋碎啊。
机型:非miui android6.0
正常使用是没问题的,但是因为我们是虚拟导航栏(可隐藏的),且悬浮窗刚好就在底部,这样一来导航栏就被悬浮窗盖住了;有没有办法使得虚拟导航栏的层级在悬浮窗之上呢?
show = mTN.getClass().getMethod("show");
找不到这个方法,有空了麻烦看看,谢谢了
需求:打开app时,弹出dialog询问用户需要获取弹窗权限,确认后再初始化Floatwindow。
问题:dialog确认按钮后,进行初始化Floatwindow,发现没有跳转到权限申请页面,关掉app再开启或者跳转下一个页面的时候才触发权限申请页面。不加判断直接初始化是没问题的
非常感谢提供,能否提供一个功能,可以左滑或者右滑隐藏一半并显示半透明呢,类似应用市场的效果,这个应用场景可能很多,非常感谢 qq1570231200
调起系统权限页面操作回来后的结果无法获取,PermissionListener在内部处理了,建议可以从外部传入
大哥,在Application初始化打开应用就可以显示,换到在MainActivity里面初始化就只能退出一次第二次进入才能显示出来,这是咋回事?
看了下代码,宽高通过setWidth setHeight 传固定的。
如果我的悬浮窗是一个textview,希望宽高可以根据textview内容自适应,能否添加支持呢
第一次获取权限时用户未授权悬浮窗权限,第二次进入页面如何重新获取权限。
@Override
public void show() {
if (once) {
mFloatView.init();
once = false;
isShow = true;
} else {
if (isShow) return;
getView().setVisibility(View.VISIBLE);
isShow = true;
}
}
第一次进来时,未获取到权限,isShow = true。 第二次进页面,如何重新获取权限并初始化mFloatView
假设main入口的activity为A。依次有A,B,C,A跳往B、在B创建悬浮窗可以显示一会然后消失,跳到C的时候情况一样。但在A创建则一切正常
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.