博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android WindowManager悬浮窗:不需要申请权限实现悬浮
阅读量:6757 次
发布时间:2019-06-26

本文共 2232 字,大约阅读时间需要 7 分钟。



Android WindowManager悬浮窗:不需要申请权限实现悬浮

附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在Android设备上的桌面窗口之上,但是WindowManager的使用,必须先申请权限,在一些定制的Android操作系统中,有可能会将WindowManager悬浮窗的权限一律屏蔽掉,这就导致基于WindowManager的APP功能难以实现。
然而,可以变通的通过设置WindowManager的类型,通过设置WindowManager的类型为WindowManager.LayoutParams.TYPE_TOAST,从而不需要申请WindowManager悬浮窗权限就可以使用WindowManager。
写一个例子。一个简单的不需要任何布局的main activity:

package zhangphil.demo;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.WindowManager;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.activity_main);        TextView textView = new TextView(this);        textView.setGravity(Gravity.CENTER);        textView.setBackgroundColor(Color.BLACK);        textView.setText("zhang phil @ csdn");        textView.setTextSize(10);        textView.setTextColor(Color.RED);        //类型是TYPE_TOAST,像一个普通的Android Toast一样。这样就不需要申请悬浮窗权限了。        WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_TOAST);        //初始化后不首先获得窗口焦点。不妨碍设备上其他部件的点击、触摸事件。        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;        params.width = WindowManager.LayoutParams.MATCH_PARENT;        params.height = 300;        //params.gravity=Gravity.BOTTOM;        textView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(getApplication(), "不需要权限的悬浮窗实现", Toast.LENGTH_LONG).show();            }        });        WindowManager windowManager = (WindowManager) getApplication().getSystemService(getApplication().WINDOW_SERVICE);        windowManager.addView(textView, params);    }}

代码运行结果:

通过这样的策略实现WindowManager,可以做很多事情,比如Android常见的音乐类APP的底部播放条,可以考虑使用这种手段实现。通过WindowManager做一个音乐播放条放在APP的顶部长期驻留。

附录:
1,《Android WindowManager悬浮窗》链接:
2,《Android桌面小部件AppWidget(1)》链接:
3,《Android桌面小部件AppWidget(2)》链接:
4,《Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3)》链接:

你可能感兴趣的文章
图片的三级缓存
查看>>
js跨域问题解决方案
查看>>
(八)统一配置中心-Config
查看>>
I.MX6 Android CAN 命令行测试
查看>>
linux shell except tcl login ssh Automatic interaction
查看>>
iOS JSONModel解析数据成Model
查看>>
QQ空间抢车位刷钱方法汇总
查看>>
[LeetCode] Missing Number
查看>>
java.lang.IllegalStateException: Illegal access
查看>>
STL容器的效率比较
查看>>
Ckeditor使用总结
查看>>
人事面试100问题--巧妙应答
查看>>
【工具类】怎么进入阿里云docker仓库
查看>>
Ceres-Solver库入门
查看>>
悲惨而又丢人的创业经历:草根创业者含恨倾诉为什么失败
查看>>
理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome介绍
查看>>
hanoi塔的递归算法
查看>>
C# 校验给定的ip地址是否合法
查看>>
lumen 登陆 注册 demo
查看>>
基于服务的并行系统的通讯方式探讨
查看>>