浅析Android Service中实现弹出对话框的坑
作者:听着music睡 发布时间:2023-04-20 16:17:13
标签:android,Service,对话框
一、手机版本问题,大多数文章没有涉及这个点,导致他们的代码并无法正常使用
M版本以上需要使用的Type--> TYPE_APPLICATION_OVERLAY
AlertDialog.Builder builder=new AlertDialog.Builder(getApplicationContext());
builder.setTitle("提示");
builder.setMessage("service弹框");
builder.setNegativeButton("明白了",null);
Dialog dialog=builder.create();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){//6.0
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
}else {
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
dialog.show();
同时,因为涉及不同版本的Android系统
AndroidManifest.xml 中声明同时需要这两个类型对应的权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
二、权限问题,service中弹出的对话框为系统弹框,在M版本以上需要申请悬浮窗权限
Android 6.0 以前悬浮窗是默认允许的
注意Android 6.0以后的使用
因为悬浮窗权限 SYSTEM_ALERT_WINDOW
属于特殊权限 ,需要自己特别单独申请
特殊权限,顾名思义,就是一些特别敏感的权限,在Android系统中,主要由两个
SYSTEM_ALERT_WINDOW(设置悬浮窗,进行一些黑科技)
WRITE_SETTINGS (修改系统设置)
关于上面两个特殊权限的授权,做法是使用startActivityForResult启动授权界面来完成。
申请方式:
private static final int REQUEST_CODE = 1;
private void requestAlertWindowPermission() {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.canDrawOverlays(this)) {
Log.i("xqxinfo", "onActivityResult granted");
}
}
}
}
来源:https://www.cnblogs.com/xqxacm/archive/2020/04/09/12667184.html


猜你喜欢
- 本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。广义上讲,Java中的随机数的有三种产生方式:(01). 通过System
- 大部分的 Java 软件开发都会使用到各种不同的库。近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些
- 1 内部类概述如果一个类存在的意义就是为指定的另一个类,可以把这个类放入另一个类的内部。就是把类定义在类的内部的情况就可以形成内部类的形式。
- 自定义 webflux 容器配置配置代码@Componentpublic class ContainerConfig extends Rea
- 之前看过一句话,说的特别好。有人问阅读源码有什么用?学习别人实现某个功能的设计思路,提高自己的编程水平。是的,大家都实现一个功能,不同的人有
- servlet、filter、listener、interceptor之间的区别和联系一、概念1.servlet:servlet是一种运行服
- 题目很简单, 就是IMessage对象怎么变成Byte[]答案1:msg.ToByteArray()这肯定不符合我们的要求答案2:using
- 最近根据项目的需求,需要限制用户每天的发送短信数量。这样以来就需要写一个定时任务,每天去置零一次所有用户的发送短信统计数量。首先,在appl
- 本文实例为大家分享了Java操作qq邮箱发送邮件的具体代码,供大家参考,具体内容如下今天尝试了使用QQ邮箱的POP3/IMAP/SMTP/E
- 1.稀疏数组引入1.1 使用场景笔者在课程设计中曾写过一个扫雷小游戏,为了便于讲解,我们来做个简化(实际比这个复杂),只考虑当前位置有雷与无
- 要求: * 对用户输入的每个字符的值进行加密,将解密后的字符串输出 * 对用户输入的已加密字符串进行解密并
- 前言:如果让大家说出一款国内比较热门的社交软件,那无疑就是QQ和微信了,说到微信,无不例外的会想到微信公众号和小程序,所以现在它们已经是很多
- 字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件。 Reader和Writer是jav
- 本文实例为大家分享了android点击按钮切换不同布局的具体代码,供大家参考,具体内容如下先上效果图:如图所示,实现点击下面的按钮切换不同的
- 在写程序的时候,有时候可能需要设置小数的位数,那么java中有哪几种保留小数位数的方法呢?本文以两位小数为例给出四种方法。package C
- 本文实例讲述了Android基于DialogFragment创建对话框的方法。分享给大家供大家参考,具体如下:/** * 使用DialogF
- 本文给大家介绍的是监听Fragment的触摸事件实现。如果大家有更好的机制,可以留言交流,下面来看看详细的介绍:大家都知道,我们的activ
- 一. ANR场景无论是四大组件或者进程等只要发生ANR,最终都会调用AMS.appNotResponding()方法,下面从这个方法说起。以
- RandomAccessFileRandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,
- 本文栈长教你如何在 Spring Boot 注册 Servlet、Filter、Listener。一、Spring Boot 注册Sprin