栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Service 使用 WindowManager addView

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Service 使用 WindowManager addView

首先写一个Activity启动Service(我这里用的是startService())

设定一个点击事件去启动Service.

public class MainActivity extends AppCompatActivity {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        Intent intent = new Intent(this, MyService.class);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startService(intent);
                Toast.makeText(MainActivity.this, "wobeidianjile", Toast.LENGTH_SHORT).show();
            }
        });
    }

}

之后再进行Service编写

LayoutParams.type一定要设定为WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;不然会报错,当前没有Activity再运行。
public class MyService extends Service {
    private WindowManager mWindowManager;
    private WindowManager.LayoutParams mLayoutParams;
    private View mLayoutView;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        init();
        addView();
    }

    private void init() {
        mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        mLayoutParams = new WindowManager.LayoutParams();
        mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
        mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
        mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        mLayoutParams.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN
                | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                | WindowManager.LayoutParams.FLAG_BLUR_BEHIND //设置外部模糊
        mLayoutParams.format = PixelFormat.TRANSLUCENT; //不设置这个弹出框的透明遮罩显示为黑色
        mLayoutParams.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;//隐藏导航栏
        mLayoutView = View.inflate(this, R.layout.privacy_file, null);
    }

    private void addView() {
        mWindowManager.addView(mLayoutView, mLayoutParams);
    }

}

进行Manifest编写,Manifest引入Service以及设置如下权限




    
    

当然,还是可能会出现TYPE_APPLICATION_OVERLAY  2038错误

原因:需要手动开启权限,代码如下会弹出一个权限设置(startActivityForResult是必须在Activity来做的,可以先写个Activity进行设置权限之后再进行删除)

Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, 100);

宗上,就完成了简单的Service 通过WindowManager进行addView操作。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1040999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号