2.当前越来越多的手机系统对悬浮窗做了权限管理,国内的android环境更是一团糟糕,使用getAppOps方法可以获取到当前APP悬浮窗是否有显示权限。如果没有,需要引导用户去手动打开悬浮窗权限。本次更新中createWindow方法会自动判断是否有权限,如果没有,会自动打开权限管理页面。因为每个系统的版本和型号不同,无法做到统一和100%,目前我自己测试的几部手机都是可以的。getAppOps也是如此.目前针对android4.0.3以上版本,6.0的动态权限,和8 9等版本测试来看都正常,如果使用中有异常,请联系我一起讨论
3.悬浮窗口的权限是系统高级权限,所以能显示在最上层,理论上权限仅次与电话权限。因此,不建议开启多个悬浮窗口。因此使用者设置一个全局变量在apiready中初始化
4.布局设计比较简单,只是打开一个内容区域,当然我们可以对此进行很多操作,去达到我们想要的效果,甚至可以直接去实现一个自定义样式的toast效果。
# **init**初始化
init()
sup = api.require('suspensionWindow');
sup.init();
Android系统
# **getAppOps**getAppOps(callback(ret))
ret:
{
p: true //布尔型;true||false,当前设备是否有在APP之外显示悬浮窗口的权限
}
sup.getAppOps(function(res) {
alert(JSON.stringify(res));
});
Android系统
# **createWindow**创建一个悬浮窗口
createWindow({params},callback(ret,err))
x:100 窗口距离屏幕左边的距离
y:100 窗口距离屏幕上边的距离
w:200 窗口的宽度
h:200 窗口的高度
(注意:测试发现js传入的xp高度和android中dp高度不一样,为2倍的关系,所以传入100即为20,如果需要全屏,那么使用api.winWidth*2即可)
text: 字符串类型 :悬浮窗口中显示的文字信息
slid: 字符串类型,窗口滑动设置:yes=随意滑动,no=不可滑动,transverse=只允许横向滑动,portrait=只允许纵向滑动
style : {
textSize : 15, //文字的大小
raduis : 40,//悬浮窗口的圆角大小
bgImg : 'widget://image/bg.png',//背景图片 此处注意bgImg参数和bgColor,raduis这组参数不能同时使用,意思是:当你设置背景图片的时候,你就不能设置背景色和圆角。这两组只能二选一。
bgColor : '#FFFFFF',//背景颜色 (注意:此处所有颜色参数可使用透明设置,例如: #50FFFFFF,前两位数字表示透明度(16进制的))
color : '#FFFFFF'//文字颜色
}
ret:
{
ret: {
code: 200, //200表示正常 201为点击事件回调
msg: '创建成功'
},
err:{
code: 400.
msg: '参数异常'
}
}
sup.createWindow({
x : 0,
y : 0,
w : 80,
h : 80,
slid : 'yes',
text : '1%',
style : {
textSize : 15,
raduis : 40,
// bgImg : 'widget://image/bg.png',
bgColor : '#50FFFFFF',
color : '#FFFFFF'
}
}, function(res,err) {
alert(JSON.stringify(res));
});
Android系统
# **show**显示悬浮窗
show()
sup.show();
Android系统
# **updateWindow**更新悬浮窗 updateWindow({params},callback(ret,err))
参数和createWindow相同如果需要更新文本,只传text即可
sup.updateWindow({
x: 100,
y: 100,
w: 200,
h: 200,
slid: 'yes',
text: '99%',
style: {
radius: 50,
bgColor: '#0000ff',
color: '#00ffff'
}
}, function(res, err) {
alert(JSON.stringify(res));
})
Android系统
# **隐藏悬浮窗** hidden ## 示例代码 sup.hidden())
Android系统