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. Codeigniter设计和架构目标
  2. python中 pip的安装方法
  3. jmeter测试java代码
  4. python基础1(来自廖雪峰的官方网站)
  5. mac PHP集成开发工具(PhpStorm)
  6. SQL语句 怎么把从一个表中查出来数据插入到另一个表中
  7. 现在的编译器还需要手动展开循环吗_DSP(知识点+思考题)
  8. springboot + redis
  9. 9个月一迭代,比特大陆量产AI芯片想落地于这三个场景
  10. window命令行启动Mysql并安装服务
  11. SpringBoot上传文件类型检测
  12. java接口分几种类型_细数Java接口的概念、分类及与抽象类的区别
  13. 功能测试主要做什么?
  14. java 刽子手图像代码_刽子手游戏
  15. 最新各大互联网公司薪酬盘点!你想好去哪家了吗?
  16. 给你的2D游戏添加3D效果
  17. 学习笔记-Web Generic
  18. Docker 使用快速入门
  19. JS -- 对于JQuery中 append 方法的理解
  20. Win10任务栏图标一直刷新的解决方法

热门文章

  1. 计算机网络的硬盘组成,大卸八块!编辑为你揭秘硬盘的内部结构
  2. uniaccess安全助手卸载_“安装一分钟,卸载半小时”,盘点高速下载通道中的流氓操作...
  3. MASQUERADE
  4. 简书粉丝列表老bug
  5. Docker Swarm 入门
  6. C#中跨线程操作控件
  7. 广东学考计算机专业要多少排位,太难了!2021年学考录取分数大暴涨!深职、广轻需要300分以上?...
  8. php分页显示数据表格显示,php+layui数据表格实现数据分页渲染代码
  9. java包含_【Java】判断字符串是否包含子字符串
  10. android adb模拟点击,Android adb 模拟滑动 按键 点击事件(示例代码)