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 ...
最新文章
- 《图解HTTP》笔记之TCP/IP
- DNS服务器之简单配置(一)
- 2016年第七届蓝桥杯javaB组 试题 答案 解析
- 操作系统--系统调用
- Cent OS dhcp配置
- 一个好用的浏览器暗色浏览插件 Dark Reader
- 【指南】远程抄表系统(AMR/AMI)中无线模块选型
- python Json的一点收获,自定义序列化方法
- 【Spring】Spring boot的ApplicationContextAware 实现获取service
- 计算机视觉CV中特征点方法相关函数的学习笔记~
- VC6LineNumber完美破解版
- python 读取excel表内容:以获取高铁站点经纬度为例子
- 常用开关稳压电源(LM2596、MC3406)
- js 判断图片和视频是否加载成功
- 剑指offer 从未到头打印列表
- office在线预览 word在线预览 .net在线预览 文件在线浏览接口
- 单字双字三字_古人取名有什么讲究?为什么有时候单字多有时候双字多?
- 南理工计算机学院贾修一,南京理工大学考研研究生导师简介-贾修一
- uniapp下载图片
- sendmail命令的使用
热门文章
- 【云图】如何制作全国×××查询系统?
- java集合类程序代码_Java集合类源代码分析二:ArrayList(1)
- 利用HTML+JS+CSS实现简单的网页计算器,附html所有源代码,可直接黏贴运行
- 用U盘打开XP登入码
- SpringCloud分布式开发五大组件详解
- 使用 jsfl 发布flash IDE 插件
- linux c 数字变字符串,Linux C 知识 char型数字转换为int型 int型 转换为Char
- linux中使用Vsftpd+nginx 搭建文件服务器
- 数据库ACID、脏读、不可重复读和幻读
- jmter测试jmeter参数化(必须掌握)