android 8.0 悬浮窗 最简demo
MainActivity.java文件
package com.example.performance;import android.app.Activity; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {if (Build.VERSION.SDK_INT >= 23) {if (Settings.canDrawOverlays(MainActivity.this)) { // Intent intent = new Intent(MainActivity.this, FloatingService.class);Toast.makeText(MainActivity.this,"已开启Toucher",Toast.LENGTH_SHORT).show(); // startService(intent); // finish();} else {//若没有权限,提示获取.Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);Toast.makeText(MainActivity.this,"需要取得权限以使用悬浮窗",Toast.LENGTH_SHORT).show();startActivity(intent);}} else {//SDK在23以下,不用管. // Intent intent = new Intent(MainActivity.this, FloatingService.class); // startService(intent); // finish(); }setContentView(R.layout.activity_main);Button startFloatWindow=(Button) findViewById(R.id.btn_floatWindows);startFloatWindow.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this, FloatingService.class);startService(intent);finish();}});super.onCreate(savedInstanceState);} }
FloatingService.java 文件
package com.example.performance;import android.annotation.SuppressLint; import android.app.Service; import android.content.Intent; import android.graphics.Color; import android.graphics.PixelFormat; import android.os.Build; import android.os.IBinder; import android.provider.Settings; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.Button;@SuppressLint({ "ShowToast", "ClickableViewAccessibility" }) public class FloatingService extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {showFloatingWindow();return super.onStartCommand(intent, flags, startId);}private void showFloatingWindow() {if (Settings.canDrawOverlays(this)) {// 获取WindowManager服务final WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);// 新建悬浮窗控件final Button button = new Button(getApplicationContext());button.setText("Floating Window");button.setBackgroundColor(Color.BLUE);// 设置LayoutParamfinal WindowManager.LayoutParams 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_APPLICATION_OVERLAY;}layoutParams.format = PixelFormat.RGBA_8888;layoutParams.width = 500;layoutParams.height = 100;layoutParams.x = 100;layoutParams.y = 300;layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;// 将悬浮窗控件添加到WindowManager windowManager.addView(button, layoutParams);button.setOnTouchListener(new View.OnTouchListener(){private int x;private int y;@Overridepublic boolean onTouch(View view, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:x = (int) event.getRawX();y = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:int nowX = (int) event.getRawX();int nowY = (int) event.getRawY();int movedX = nowX - x;int movedY = nowY - y;x = nowX;y = nowY;layoutParams.x = layoutParams.x + movedX;layoutParams.y = layoutParams.y + movedY;// 更新悬浮窗控件布局 windowManager.updateViewLayout(view, layoutParams);break;default:break;}return false;}});}}}
View Code
activity_main.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.performance"android:versionCode="1"android:versionName="1.0" >
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/><uses-sdkandroid:minSdkVersion="26"android:targetSdkVersion="26" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name=".FloatingService"/></application></manifest>
AndroidManifest.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.performance"android:versionCode="1"android:versionName="1.0" >
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/><uses-sdkandroid:minSdkVersion="26"android:targetSdkVersion="26" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name=".FloatingService"/></application></manifest>
转载于:https://www.cnblogs.com/liuliu-word/p/10315134.html
android 8.0 悬浮窗 最简demo相关推荐
- Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了
机型多杂,适配无法完全兼容,不如换种实现方式,性能比悬浮窗好,不需要权限,效果更好:https://blog.csdn.net/m0_38058826/article/details/10399339 ...
- android悬浮动态权限,android应用内悬浮窗-自动贴边,不需要权限!
简单基于注释的API来处理运行时6.0权限配置 热门度(没变化) 10.0/10 (没变化) ">10.0 活跃度(没变化) 0.8/10 (没变化) ">0.8 Wa ...
- android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...
兼容8.0,小米,魅族,华为等难适配机型都可完美适配. 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去. Android的界面绘制,都是通过WindowMan ...
- Android8.0 悬浮窗的实现
0. 前言 现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示.这个功能在很多情况下都非常有用.那么今天我们就来实现一下Android悬浮窗,以及探索一下实 ...
- Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务WindowManager来实现此功能,本章我们来试验一下在当前Activity之上创建一个悬浮的view. 第一步:认识W ...
- Android——超简单悬浮窗使用教程
完全自定义悬浮窗,保证100%学会的超简单悬浮窗 先看看效果图: 图1 图2 ...
- Android 全屏悬浮窗适配(悬浮窗沉浸式)
前言 由于Android 高版本的类型限制,如果我们使用WindowsManager 做悬浮窗,会被限制在当前窗口内容中.而当前窗口大小会限制在状态栏和导航栏之间,所以会导致悬浮窗沉浸不了状态栏. 高 ...
- Android中自定义悬浮窗
有时候,我们可能会需要制作一个始终悬浮的窗口显示一些关键信息.它独立于我们的页面,可以在不妨碍用户操作的情况下显示信息.这里我们就学习一下悬浮窗的做法. 1.WindowManager的常用方法 ge ...
- android动态获取悬浮窗,Android 悬浮窗实现
Android悬浮窗实现中需要注意的两点是 1.Android 6.0之后的悬浮窗动态申请 2.Window 的type属性在Android8.0前后的适配 public abstract class ...
最新文章
- Codeigniter设计和架构目标
- python中 pip的安装方法
- jmeter测试java代码
- python基础1(来自廖雪峰的官方网站)
- mac PHP集成开发工具(PhpStorm)
- SQL语句 怎么把从一个表中查出来数据插入到另一个表中
- 现在的编译器还需要手动展开循环吗_DSP(知识点+思考题)
- springboot + redis
- 9个月一迭代,比特大陆量产AI芯片想落地于这三个场景
- window命令行启动Mysql并安装服务
- SpringBoot上传文件类型检测
- java接口分几种类型_细数Java接口的概念、分类及与抽象类的区别
- 功能测试主要做什么?
- java 刽子手图像代码_刽子手游戏
- 最新各大互联网公司薪酬盘点!你想好去哪家了吗?
- 给你的2D游戏添加3D效果
- 学习笔记-Web Generic
- Docker 使用快速入门
- JS -- 对于JQuery中 append 方法的理解
- Win10任务栏图标一直刷新的解决方法
热门文章
- 计算机网络的硬盘组成,大卸八块!编辑为你揭秘硬盘的内部结构
- uniaccess安全助手卸载_“安装一分钟,卸载半小时”,盘点高速下载通道中的流氓操作...
- MASQUERADE
- 简书粉丝列表老bug
- Docker Swarm 入门
- C#中跨线程操作控件
- 广东学考计算机专业要多少排位,太难了!2021年学考录取分数大暴涨!深职、广轻需要300分以上?...
- php分页显示数据表格显示,php+layui数据表格实现数据分页渲染代码
- java包含_【Java】判断字符串是否包含子字符串
- android adb模拟点击,Android adb 模拟滑动 按键 点击事件(示例代码)