Android悬浮窗口开发

注意:

1. 需要Context上下文,在绝大多数非原生系统上,context上下文会影响悬浮窗的显示范围。在MIUI和华为等国产系统上,使用Activity的Context只能显示在Activity里,一旦后台就看不见了。所以你的悬浮窗需要后台显示,就一定要使用getApplicationContext()。

(用Activity的上下文,窗口就隶属于Activity,有些情况退出当前活动窗口消失,有时不消失,最好的办法就是在活动生命周期中控制移除窗口,使用getApplicationContext上下文,窗口隶属于启动它的应用程序所在进程,这种情况只要app不被杀死,就可以看到窗口)

2. 在大于等于23版本下编译,悬浮窗权限默认是关闭没有权限,然儿在小于23版本下编译悬浮窗权限是开启有权限的。

3. 当你需要一个后台悬浮窗时,_type这个参数得注意和了解一下,推荐使用TYPE_TOAST(该属性不需要开启权限都可以显示悬浮窗口,只是相关的对象属性无法正常使用)

TYPE_TOAST :
`优点` : 无需开启悬浮窗权限,`缺点`:API < 19 时无法处理触控操作
TYPE_SYSTEM_ALERT :
`缺点` 需要开启悬浮窗权限

4. addView这步才回调用权限,这个使用可以使用try catch捕捉异常,提示用户自己去打开即可

public void showFloatView(){
    if (mWindowManager == null && mFloatView == null) {
        return;
    }

    try {
        if (Build.VERSION.SDK_INT >= 23) {
            if (Settings.canDrawOverlays(mContext)) {
                mWindowManager.addView(mFloatView, wmParams);
            }else{
                Toast.makeText(mContext, "悬浮权限未打开,请到应用设置中打开", Toast.LENGTH_SHORT).show();
            }
        }else{
            mWindowManager.addView(mFloatView, wmParams);
        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(mContext, "悬浮权限未打开,请到应用设置中打开", Toast.LENGTH_SHORT).show();
    }

}

5.应用的悬浮权限没有打开,拖动等属性失效,视图也会失效,手动打开权限又恢复正常

权限:android.permission.SYSTEM_ALERT_WINDOW

注意:

1.该权限必须配置了,才会在应用管理中出现可以选择的按钮

2.服务对象需要在清单文件声明,否则启动服务无反应

 

开发案例:

悬浮窗口弹起入口:

case R.id.iv_video_change://悬浮视频

    if (PermissionCheckUntil.getAppOps(context)) {
        Intent intent;
        //启动服务显示悬浮窗口
        intent = new Intent(context, FloatVideoService.class);
        context.startService(intent);

        //跳回视频界面前的活动
        int stackSize = ActivityStack.getInstance().getStack().size();
        if (stackSize > 1) {
         
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值