Android-应用内悬浮球(应用置于后台时不显示)

转载请注明出处

最近实验室要增加一个需求,需要一个在应用内部显示的悬浮球,因为这个悬浮球只与本应用相关,当应用只在后台运行时,这个悬浮球要隐藏掉,不得影响用户的其他操作。在网上搜索了一下,也没有找到相关的实现,于是自己想了一下,实现了隐藏和显示的逻辑。

悬浮球的实现直接借用了该博文中的方法 http://blog.csdn.net/stevenhu_223/article/details/8504058

关于悬浮球的实现就不再赘述了,网络上也有很多写的很好的demo,主要是使用WindowManager来实现。我主要介绍如何隐藏和恢复悬浮窗。


由于打开app之后会在各种Activity之间切换,要保证悬浮窗始终在顶层显示,需要将悬浮窗的实现逻辑放在Service中,并且该Service不应该是绑定的。可以考虑在Service中设置一个用来表示当前应用处于前台的活跃状态的Activity的数目的标识activeNumber,一般情况下为1,如果应用完全位于后台,activeNumber的值为零,此时应该隐藏悬浮窗;如果应用重新被从后台打开,悬浮窗应该恢复。还要在Service中注册一个BroadcastReceiver,用来接收各个Activity发来的广播,以修改activeNumber的值。

以下是FloatWindowService的具体实现

public class FloatWindowService extends Service
{
   
    private static final String TAG = "FloatWindowService";
    private static final String UPDATE_ACTION="com.liang.lib.ACTIVE_NUMBER";

    //标识当前app有几个activity处于前台活跃状态
    private static int activeNumber=1;

    Button mFloatView;
    //定义浮动窗口布局
    LinearLayout mFloatLayout;
    WindowManager.LayoutParams wmParams;
    //创建浮动窗口设置布局参数的对象
    WindowManager mWindowManager;
    MyReceiver myReceiver;
    //表示悬浮窗的显示状态
    private boolean mHasShown;

    @Override
    public void onCreate()
    {
        super.onCreate();
        Log.e(TAG, "oncreat");
        //注册BroadCastReceiver
        myReceiver=new MyReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction(UPDATE_ACTION);
        registerReceiver(myReceiver,filter);
        //初始化悬浮窗UI
        createFloatView();
    }

    @Override
    public IBinder onBind(Intent intent)
    {
        return null;
    }

    public void createFloatView()
    {
        wmParams = new WindowManager.LayoutParams();
        
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值