1、判断悬浮窗是否打开

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {val canDrawOverlays = Settings.canDrawOverlays(this)Log.d(TAG, "onCreate:canDrawOverlays=$canDrawOverlays ")findViewById<TextView>(R.id.status).text = "是否可悬浮在其他app上:${canDrawOverlays.toString()}"}

2.Settings.canDrawOverlays(this)

 /*** Checks if the specified context can draw on top of other apps. As of API* level 23, an app cannot draw on top of other apps unless it declares the* {@link android.Manifest.permission#SYSTEM_ALERT_WINDOW} permission in its* manifest, <em>and</em> the user specifically grants the app this* capability. To prompt the user to grant this approval, the app must send an* intent with the action* {@link android.provider.Settings#ACTION_MANAGE_OVERLAY_PERMISSION}, which* causes the system to display a permission management screen.** @param context App context.* @return true if the specified context can draw on top of other apps, false otherwise*/public static boolean canDrawOverlays(Context context) {return Settings.isCallingPackageAllowedToDrawOverlays(context, Process.myUid(),context.getOpPackageName(), false) || context.checkSelfPermission(Manifest.permission.SYSTEM_APPLICATION_OVERLAY)== PackageManager.PERMISSION_GRANTED;}

检查指定的context是否可以绘制到其他app之上,从23开始,要出现悬浮框,必须注册权限SYSTEM_ALERT_WINDOW,并且用户要明确授权此意图。要提示用户授予此批准,应用程序必须发送带有操作的意图。
Settings#ACTION_MANAGE_OVERLAY_PERMISSION 跳转到系统显示管理权限的界面

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

如果不注册SYSTEM_ALERT_WINDOW权限,在系统中悬浮窗配置列表中,会找不到自己的应用。

3.code

class MainActivity : AppCompatActivity() {private val PermissionRequestCode = 11111private var activityResultLauncher: ActivityResultLauncher<Intent>? = nullprivate val TAG = "MainActivity"override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)activityResultLauncher =registerForActivityResult(ActivityResultContracts.StartActivityForResult(), object :ActivityResultCallback<ActivityResult> {override fun onActivityResult(result: ActivityResult?) {//接收回调,更新状态updateStatus()}})findViewById<Button>(R.id.click).setOnClickListener {val intent = Intent()intent.action = Settings.ACTION_MANAGE_OVERLAY_PERMISSIONintent.data = Uri.parse("package:$packageName");activityResultLauncher?.launch(intent)}}private fun updateStatus() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {val canDrawOverlays = Settings.canDrawOverlays(this)Log.d(TAG, "onCreate:canDrawOverlays=$canDrawOverlays ")findViewById<TextView>(R.id.status).text = "是否可悬浮在其他app上:${canDrawOverlays.toString()}"}}
}

4. java.lang.IllegalStateException: LifecycleOwner com.xx.MainActivity@28b4e79 is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.

registerForActivityResult 要提前初始化,准备来说要在activity的start()结束之前初始化

 java.lang.IllegalStateException: LifecycleOwner com.example.testoverlaypermission.MainActivity@28b4e79 is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.at androidx.activity.result.ActivityResultRegistry.register(ActivityResultRegistry.java:123)at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:682)at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:691)at com.example.testoverlaypermission.MainActivity.onCreate$lambda-1(MainActivity.kt:28)

android 悬浮窗的检查相关推荐

  1. Android悬浮窗原理解析(Window)[源码]

    悬浮窗,在大多数应用中还是很少见的,目前我们接触到的悬浮窗,差不多都是一些系统级的应用软件,例如:360安全卫士,腾讯手机管家等:在某些服务行业如金融,餐饮等,也会在应用中添加悬浮窗,例如:美团的偷红 ...

  2. Android展开悬浮窗功能,Android 悬浮窗 (附圆形菜单悬浮窗)

    序言 Android悬浮窗的实现,主要有四个步骤: 1. 声明及申请权限 2. 构建悬浮窗需要的控件 3. 将控件添加到WindowManager 4. 必要时更新WindowManager的布局 一 ...

  3. android悬浮窗状态下的点击、滑动

    android悬浮窗状态下的点击.滑动: 提前的准备 需要到下载android源码中两个文件,可通过http://aospxref.com/ 或者http://androidxref.com/(更新慢 ...

  4. android悬浮窗语音识别demo

    带有android悬浮窗的语音识别语义理解demo 如发现代码排版问题,请访问CSDN博客 Android桌面悬浮窗实现比较简单,本篇以一个语音识别,语义理解的demo来演示如何实现android悬浮 ...

  5. Android 悬浮窗功能的实现

    前言 我们大多数在两种情况下可以看到悬浮窗,一个是视频通话时的悬浮窗,另一个是360卫士的悬浮球,实现此功能的方式比较多,这里以视频通话悬浮窗中的需求为例.编码实现使用Kotlin.Java版本留言邮 ...

  6. Android悬浮窗的简单实现

    1. 前言 现在很多应用都有小悬浮窗的功能,比如看直播的时候,通过Home键返回桌面,直播的小窗口仍可以在屏幕上显示.下面将介绍下悬浮窗的的一种简单实现方式. 2.原理 Window我们应该很熟悉,它 ...

  7. Android悬浮窗的实现

    Android悬浮窗的实现 *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 本文也发布于本人的知乎文章:https://zhuanlan.zhihu.com/p/39421112 ...

  8. 安卓java浮层不响应点击事件,Android悬浮窗屏蔽悬浮窗外部所有的点击事件的实例代码...

    Android可以在所有应用上方添加View,就是给WindowManager添加一个View,在创建的View的时候可以给这个View设置LayoutParams(android.view.Wind ...

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

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

最新文章

  1. 查看jks文件中的签名
  2. java写exe程序实例,java实现可安装的exe程序实例详解
  3. Ubuntu 下获得root权限
  4. PAT甲级1084 Broken Keyboard:[C++题解]字符串处理、双指针算法
  5. Java并发编程(8):多线程环境中安全使用集合API(含代码)
  6. 【总结】机器学习划分数据集的几种方法
  7. 【渝粤题库】国家开放大学2021春1334纳税筹划题目
  8. 暑假集训中期测试 Problem D: 装箱问题2 (并查集)
  9. python不支持prelu_MTCNN(九)更改python与c代码的PReLU为ReLU
  10. cass读取dat文件_南方CASS教程+视频讲解+插件汇总,小白快速上手的测绘神器
  11. 使用TensorFlow.js的AI聊天机器人五:创建电影对话聊天机器人
  12. 全程2分钟!教你如何免费下载Windows 10
  13. 不×××,用google!!
  14. 如何看注解的源码_我们为什么要看源码、应该如何看源码?
  15. python excel图表 导出word模板_使用python将Excel数据填充Word模板并生成Word
  16. SVN创建分支及合并
  17. oracle中锁表语句,oracle查询锁表解锁语句
  18. 开机直接进入键盘布局_我win10开机显示选择键盘布局 进不了界面 求助啊
  19. photoshop抠图场景二
  20. 用php和mysql写一个注册登录页面

热门文章

  1. 感动人的纯爷们!华山独臂挑夫
  2. LCD液晶屏显示问题分析
  3. PLIC简介cva6之PLIC模块阅读笔记
  4. html当中的属性cellspacing,HTML cellspacing 属性
  5. [虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控
  6. 2020ICPC上海站复盘及近期打算
  7. 父类 子类向上,向下转型
  8. 【转载】CentOS7为firewalld添加开放端口及相关操作
  9. 【人脸检测】Tencent之FaceDetection-DSFD测试与评估复现
  10. 怎样理顺 React,flux,redux 这些概念的关系,开发中有必要使用它们吗?