在开启浮窗前,要判断一下,是否能够得到浮窗权限打开浮窗。

在方法中添加以下代码:


//悬浮窗权限判断if (Settings.canDrawOverlays(MainActivity.this)) {Intent intent = new Intent(MainActivity.this, MainService.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);}

使用toast进行是否开启的提示,使用intent进行跳转。

若不用intent或者可参照前一篇,若有权限,windowmanager设置浮窗。

但有的人用以上代码可能会出现报错:Call requires API level 23 (current min is 15)

这需要在Grandle Scrips中的build.grandle中的android中的defaultConfig中修改,把minSdkVersion 15 改为minSdkVersion 23即可。但是如果你的API版本很低不能支持23,这种方法也不能解决。

新的修改方法如下:


if(Build.VERSION.SDK_INT >= 23) {//当版本高于等于23,放心使用上面的代码,不会报错if (Settings.canDrawOverlays(MainActivity.this)) {//浮窗获得servicewindowManager  = (WindowManager) getApplication().getSystemService(WINDOW_SERVICE);lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;lp.gravity = Gravity.LEFT|Gravity.TOP;  //显示在屏幕左上角//显示位置与指定位置的相对位置差lp.x = 0;lp.y = 0;//悬浮窗的宽高lp.width = WindowManager.LayoutParams.WRAP_CONTENT;lp.height = WindowManager.LayoutParams.WRAP_CONTENT;lp.format = PixelFormat.TRANSPARENT;//移除窗口if (imageView != null){windowManager.removeView(imageView);}//imageview设置imageView = new ImageView(getApplicationContext());imageView.setImageResource(R.mipmap.ic_launcher);windowManager.addView(imageView,lp);//imageview触摸监听imageView.setOnTouchListener(new View.OnTouchListener() {private float lastX, lastY;private float nowX, nowY;private float tranX,tranY;@Overridepublic boolean onTouch(View v, MotionEvent event) {boolean ret = false;switch (event.getAction()){//按下case MotionEvent.ACTION_DOWN://上次位置lastX = event.getRawX();lastY = event.getRawY();ret = true;break;//拖动case MotionEvent.ACTION_MOVE://当前目标位置nowX = event.getRawX();nowY = event.getRawY();tranX = nowX - lastX;tranY = nowY - lastY;//移动lp.x += tranX;lp.y += tranY;//更新位置windowManager.updateViewLayout(imageView,lp);//记录当前坐标作为下一次计算的上一次移动的位置坐标lastX = nowX;lastY = nowY;break;//弹起不操作case MotionEvent.ACTION_UP:break;}return ret;}});Toast.makeText(MainActivity.this,"已开启Toucher",Toast.LENGTH_SHORT).show();} else {//若没有权限,提示获取.Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);Toast.makeText(MainActivity.this,"需要取得权限以使用悬浮窗",Toast.LENGTH_SHORT).show();startActivity(intent);}} else {//当版本低于23时,canDrawOverlays报错,可使用其他方法....}

具体else中的怎样写我还没有很好的办法,这只是一种暂时不报错的办法,并不严谨。

仍在入门,如有错误,欢迎指出

Android浮窗权限判断相关推荐

  1. Android浮窗权限研究(转载)

    这篇博客主要介绍的是 Android 主流各种机型和各种版本的悬浮窗权限适配,但是由于碎片化的问题,所以在适配方面也无法做到完全的主流机型适配,这个需要大家的一起努力,这个博客的名字永远都是一个将来时 ...

  2. 软件不兼容android5.1.1,Android 解决OPPO 5.1 浮窗权限不兼容问题

    OPPO 5.1 浮窗权限开启并不像大多Android机那样在手机设置中,而是在OPPO的系统软件-手机安全中心-中, 故跳转到权限界面,需要做特殊处理. 1.判断是否为 OPPO 5.1 系统 if ...

  3. Android浮窗实现(WindowManager)

    浮窗就是当当前页面关闭后,仍能在手机上显示的窗口,像浮在最上层一样,一直存在,一般可跟随手拖动而移动. 加速球就是一个浮窗. 浮窗的大小和形状等都可以自己设定,不是一定的. 效果(屏幕中小方形为浮窗, ...

  4. android浮窗播放器,Android仿优酷视频的悬浮窗播放效果

    之前接了需求要让视频播放时可以像优酷视频那样在悬浮窗里播放,并且悬浮窗和主播放页面之间要实现无缝切换,项目中使用的是自封装的ijkplayer 这个要求就代表不能在悬浮窗中新建视频控件,所以需要在悬浮 ...

  5. Android 悬浮窗权限各机型各系统适配大全(总结)

    原文链接:点击打开链接 ======================================================================================== ...

  6. Android 悬浮窗权限各机型各系统适配大全

    这篇博客主要介绍的是 Android 主流各种机型和各种版本的悬浮窗权限适配,但是由于碎片化的问题,所以在适配方面也无法做到完全的主流机型适配,这个需要大家的一起努力,这个博客的名字永远都是一个将来时 ...

  7. android悬浮窗权限相关

    越过用户授权使用浮窗 FloatUtil 适配手机跳到悬浮窗设置页面的库settingscompat 聊一聊 Android 6.0 的运行时权限 关于shouldShowRequestPermiss ...

  8. android 6.0权限判断 音频 拍照 相册

    /*------------------------------------------打开音频权限------------------------------------------------*/ ...

  9. Android 悬浮窗权限 及设置悬浮窗参数

    在 4.4~5.1.1 版本之间,和 6.0~最新版本之间的适配方法是不一样的,之前的版本由于 google 并没有对这个权限进行单独处理,所以是各家手机厂商根据需要定制的,所以每个权限的授权界面都各 ...

最新文章

  1. Reveal.js一个用来做WEB演示文稿的框架
  2. zigbee学习之路(二)点亮LED
  3. MySQL 规范及优化
  4. pwntools用docker实现,进行pwn题解答
  5. 手把手带你玩转Tensorflow 物体检测 API (4)—— 模型验证
  6. UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。
  7. powershell目录带空格_精心构造的PS1文件名导致Powershell命令执行
  8. Bsdiff差分算法讲解
  9. UVa673 - Parentheses Balance
  10. Unity PlayerPrefs类进行扩展(整个对象进行保存)
  11. php static 关键字
  12. 深入理解viewport及相关属性的关系
  13. excel实现分组计数
  14. 7-2 求奇数和 (5 分)
  15. 华为手机怎么使用读卡器_华为手机怎么绑定门禁卡
  16. 转战物联网·基础篇12-了解物联网之物连接相关通信技术(1)
  17. ESP8266-12F WIFI转串口模块底板设计
  18. 安装sql server走过的弯路,收集了一些安装sql遇到的问题
  19. oracle 12c基本管理,oracle 基本管理
  20. 计算机桌面怎么设置在开始菜单,电脑桌面开始菜单不见了应该如何解决?_开始菜单不见了解决办法介绍...

热门文章

  1. 模型实践 | AI驱动的全球精准气象预报
  2. 如何实现转圈圈动画效果
  3. mysql中没有utf8字符集_mysql之坑–UTF8字符集
  4. Webpack构建vue项目-记录
  5. QQ查询信息php,查询QQ信息
  6. 项目中引用Iconfont(阿里巴巴矢量图标)的方式
  7. 1716: [Usaco2006 Dec]The Fewest Coins 找零钱
  8. 华为彩信显示尚未激活服务器,华为手机无法接收彩信提示要开通gprs
  9. 40岁开始学python_37 岁了,想学习 Linux 和 Python ,不知道晚不晚。
  10. BPM平台为企业“增值”