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相关推荐

  1. Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了

    机型多杂,适配无法完全兼容,不如换种实现方式,性能比悬浮窗好,不需要权限,效果更好:https://blog.csdn.net/m0_38058826/article/details/10399339 ...

  2. android悬浮动态权限,android应用内悬浮窗-自动贴边,不需要权限!

    简单基于注释的API来处理运行时6.0权限配置 热门度(没变化) 10.0/10 (没变化) ">10.0 活跃度(没变化) 0.8/10 (没变化) ">0.8 Wa ...

  3. android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...

    兼容8.0,小米,魅族,华为等难适配机型都可完美适配. 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去. Android的界面绘制,都是通过WindowMan ...

  4. Android8.0 悬浮窗的实现

    0. 前言 现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示.这个功能在很多情况下都非常有用.那么今天我们就来实现一下Android悬浮窗,以及探索一下实 ...

  5. Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定

    最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务WindowManager来实现此功能,本章我们来试验一下在当前Activity之上创建一个悬浮的view. 第一步:认识W ...

  6. Android——超简单悬浮窗使用教程

    完全自定义悬浮窗,保证100%学会的超简单悬浮窗 先看看效果图: 图1                                                 图2               ...

  7. Android 全屏悬浮窗适配(悬浮窗沉浸式)

    前言 由于Android 高版本的类型限制,如果我们使用WindowsManager 做悬浮窗,会被限制在当前窗口内容中.而当前窗口大小会限制在状态栏和导航栏之间,所以会导致悬浮窗沉浸不了状态栏. 高 ...

  8. Android中自定义悬浮窗

    有时候,我们可能会需要制作一个始终悬浮的窗口显示一些关键信息.它独立于我们的页面,可以在不妨碍用户操作的情况下显示信息.这里我们就学习一下悬浮窗的做法. 1.WindowManager的常用方法 ge ...

  9. android动态获取悬浮窗,Android 悬浮窗实现

    Android悬浮窗实现中需要注意的两点是 1.Android 6.0之后的悬浮窗动态申请 2.Window 的type属性在Android8.0前后的适配 public abstract class ...

最新文章

  1. 《图解HTTP》笔记之TCP/IP
  2. DNS服务器之简单配置(一)
  3. 2016年第七届蓝桥杯javaB组 试题 答案 解析
  4. 操作系统--系统调用
  5. Cent OS dhcp配置
  6. 一个好用的浏览器暗色浏览插件 Dark Reader
  7. 【指南】远程抄表系统(AMR/AMI)中无线模块选型
  8. python Json的一点收获,自定义序列化方法
  9. 【Spring】Spring boot的ApplicationContextAware 实现获取service
  10. 计算机视觉CV中特征点方法相关函数的学习笔记~
  11. VC6LineNumber完美破解版
  12. python 读取excel表内容:以获取高铁站点经纬度为例子
  13. 常用开关稳压电源(LM2596、MC3406)
  14. js 判断图片和视频是否加载成功
  15. 剑指offer 从未到头打印列表
  16. office在线预览 word在线预览 .net在线预览 文件在线浏览接口
  17. 单字双字三字_古人取名有什么讲究?为什么有时候单字多有时候双字多?
  18. 南理工计算机学院贾修一,南京理工大学考研研究生导师简介-贾修一
  19. uniapp下载图片
  20. sendmail命令的使用

热门文章

  1. 【云图】如何制作全国×××查询系统?
  2. java集合类程序代码_Java集合类源代码分析二:ArrayList(1)
  3. 利用HTML+JS+CSS实现简单的网页计算器,附html所有源代码,可直接黏贴运行
  4. 用U盘打开XP登入码
  5. SpringCloud分布式开发五大组件详解
  6. 使用 jsfl 发布flash IDE 插件
  7. linux c 数字变字符串,Linux C 知识 char型数字转换为int型 int型 转换为Char
  8. linux中使用Vsftpd+nginx 搭建文件服务器
  9. 数据库ACID、脏读、不可重复读和幻读
  10. jmter测试jmeter参数化(必须掌握)