专栏首页Android干货浅谈Service中实现弹出对话框的坑

浅谈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");
     }
   } 
  } 
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • asp.net 2.0中的弹出对话框

    在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写:

    Java架构师必看
  • Android实现退出界面弹出提示对话框

    根据之前学的Android对话框技术,来实现下面一个效果:界面有一个”退出”按钮,按下之后会弹出一个询问是否退出的提示对话框,单击”不”按钮,不退出游戏,单击”...

    砸漏
  • 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    1)在线Push:比如QQ、微信等IM界面处于前台时,聊天消息和指令都会通过IM自建的网络长连接通道推送过来,这种Push在本文中暂且称为“在线Push”;

    JackJiang
  • ASP.Net后台 实现先弹出对话框,再跳转到另一个网页的实现方法

    阿豪聊干货
  • Netty干货分享:京东京麦的生产级TCP网关技术实践总结

    京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关。在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行...

    JackJiang
  • 前端跨域知识简介

    前端跨域知识简介 灵感 差不多2年前,由于业务需要,了解各种各样不同的跨域方式。但由于各种方式千奇百怪,我觉得有必要将各种方法封装起来,方便使用,弄了个简单的跨...

    李成熙heyli
  • 小程序一周报

    极乐君
  • phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

    #phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这...

    喵了个咪233
  • 聊聊我眼中的微服务

    2018年7月19日,我的处女作《Spring Cloud微服务-全栈技术与案例解析》开卖了。这是一个值得纪念的日子,也是对自己平时学习的考核。

    猿天地
  • 「4+1视图」学习与理解

    之前经常看到文章中提到「4+1视图」,对其也有片面的理解,但一直没有实践过,不清楚其真正的作用,这两天在业务需求分析中运用了其中的一部分,想谈谈自己的粗浅理解。...

    情情说
  • 2016校招内推 -- 腾讯SNG前端 -- 面试经历

    3.让你设计一个web站点,假如只有你一个人设计实现,前端后端都让你一个人负责,具体你要怎么做?

    书童小二
  • SAP Spartacus 自定义Popover指令,如何实现弹出对话框自动关闭功能

    Popover Component的 appendToBody如果设置成true:

    Jerry Wang
  • 腾讯社招iOS面试记录

    毕业好几年了,上周发送了简历给腾讯,参加了腾讯面试。具体部门这边就不说了。这次面试还是收获到了很多。

    iOSSir
  • 2021Android 面试宝典:实战记录+回答技巧,让每个知识知其所以然!(持续更新中)

    该面试宝典不仅收录了本人亲身面试遇到的问题,还收录了从一些朋友那里收集过来的问题。在以后的工作中本 人也会不断的更新和充实该面试宝典,当然也希望大家能够多多奉献...

    Android技术干货分享
  • RPC(二)

    If you fear failure, you will never go anywhere.

    小闫同学啊
  • 被标记为事务的方法互相调用的坑(上)

    相信大家一定用过Spring中的注解型事务,配合上Spring Boot,只需要在方法上打一个@Transactional 就可以完成,真香。

    java架构师
  • 今日推荐:awesome-architecture

    但是这条路还是有很多人走,而且也留下了相应的封神之法,今天推荐的就是一个相当详细的架构师框架学习图。内容很充实,看目录的时候,滚动条滚了很多次!学习起来肯定也不...

    仇诺伊
  • 国内 Mono 相关文章汇总

    一则新闻《软件服务提供商Xamarin融资1200万美元》,更详细的内容可以看Xamarin的官方博客Xamarin raises $12M to help y...

    张善友
  • Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案

    装饰器(Decorator)是 Python 非常实用的一个语法糖功能。装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”。其目的是在不对现有函数进...

    霍格沃兹测试开发

扫码关注云+社区

领取腾讯云代金券