悬浮窗

本文介绍了如何在Android中创建一个悬浮窗服务,通过`FloatingService`类展示了一个实现悬浮窗的示例代码,包括设置窗口参数、权限检查以及添加和移除悬浮视图的方法。同时,展示了在AndroidManifest.xml中注册服务的步骤。文章还提到了悬浮窗权限的检查和设置,以及调用悬浮窗服务的方法。
摘要由CSDN通过智能技术生成

利用WindowManager创建悬浮窗 

悬浮窗服务 

public class FloatingService extends Service {

    private WindowManager windowManager;
    private WindowManager.LayoutParams layoutParams;

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

    @Override
    public void onCreate() {
        super.onCreate();

        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        layoutParams = new WindowManager.LayoutParams();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        } else {
            layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
        }

        layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
        // 设置背景透明
        layoutParams.format = PixelFormat.TRANSPARENT;
//        layoutParams.format = PixelFormat.RGBA_8888;
        layoutParams.windowAnimations = R.style.AnimationTopFade;
        layoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
        layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        showFloatingWindow();
        return super.onStartCommand(intent, flags, startId);
    }

    private void showFloatingWindow() {
        View view = LayoutInflater.from(this).inflate(R.layout.float_view, null);
        Button btn = view.findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ...
            }
        });
        // show
        windowManager.addView(view, layoutParams);

        // hide
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                windowManager.removeView(view);
            }
        }, 4000);
    }

}

调用:

    @RequiresApi(api = Build.VERSION_CODES.M)
    private void showUpdatePwdFloatView() {
        // 悬浮窗权限判断
        if (!Settings.canDrawOverlays(MainActivity.this)) {
            Toast.makeText(this, "为能及时收到通知,建议您开启悬浮窗权限", Toast.LENGTH_LONG).show();
            startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), OVERLAYS_CODE);
        } else {
            startService(new Intent(MainActivity.this, UpdatePwdFloatingService.class));
        }
    }

记得要在AndroidMainfest.xml里注册服务

<service android:name=".service.FloatingService" />

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值