`
liguanyi11111
  • 浏览: 62966 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类
最新评论

Android 检测手机是否允许弹出悬浮窗

阅读更多

  如今手机大多数都是用各个厂商定制的ROM,大部分Rom都添加了是否允许弹出悬浮窗的权限(小米,魅族,乐视等等)。这里提供一个方法来让app自己检查自己是否允许弹出悬浮窗。代码为了独立舍弃了一些优化方法,大家可以自行根据情况修改。

    /**
     * 检测当前是否可以显示悬浮窗(与是否有悬浮窗权限有一定区别 华为手机当有activity存在时,无论是否有权限都允许弹出悬浮窗。)
     * @param context
     * @param result {@link }
     * @return true 开始检测  false检测失败
     */
    public static boolean checkFloatWindowAllowShow(Context context,final ICheckResult result){
        final WindowManager windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
        if(windowManager == null){
            return false;
        }
        WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
        params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
        params.width = 0;
        params.height = 0;
        final Handler handler = new Handler();
        final View view = new View(context){

            @Override
            public void onWindowFocusChanged(boolean hasWindowFocus) {
                handler.removeCallbacksAndMessages(null);
                if(getParent() != null) {
                    windowManager.removeView(this);
                }
                //允许弹出悬浮窗
                result.onResult(true);
            }
        };
        windowManager.addView(view, params);
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                windowManager.removeView(view);
                handler.removeCallbacksAndMessages(null);
                //禁止弹出悬浮窗
                result.onResult(false);
            }
        }, 100);
        return true;
    }

    /**
     * 用于反馈检查结果
     */
    public interface ICheckResult{
        void onResult(boolean isAllow);
    }

 这个方法可以解决绝大部分手机ROM的检测问题(本地测试5款常见手机,都可以检测)。不过注意一点,华为手机因为他的悬浮窗权限比较特殊,当app由activity在前台时,无论是否拥有权限,华为均可弹出悬浮窗。所以要完美检测当前是否有权限,需要在前台没有activity时调用,例如在service中使用,否则无法检测。

分享到:
评论
1 楼 麦田的设计者 2017-01-06  
在金山工作?

相关推荐

    监听来电号码并弹出悬浮窗

    监听来电号码并弹出悬浮窗功能的实现,不仅需要开发者掌握Android系统广播接收器的使用,还需要关注用户隐私保护和应用安全性。通过合理的设计和编码实践,开发者可以在保证用户体验和应用安全的基础上,创造出符合...

    Android 仿QQ后台运行时收到推送消息 在顶部弹出 源码

    在Android开发中,实现类似QQ后台运行时接收到推送消息并在屏幕顶部弹出的效果,主要涉及到以下几个关键知识点: 1. **通知系统(Notification System)**: Android的通知系统是应用程序与用户交互的重要途径,...

    Android应用源码之仿QQ的头像选择弹出的对话框,酷似!.rar

    本示例源码“Android应用源码之仿QQ的头像选择弹出的对话框,酷似!”就是一个典型的例子,它展示了如何在自己的应用中实现一个类似于QQ的头像选择对话框。这个对话框通常用于用户设置或更改个人头像时出现,提供了...

    Android高级应用源码-android打电话源码.zip

    当手机接收到来电时,系统会发送一个`ACTION_PHONE_STATE_CHANGED`广播,接收器可以监听这个广播并做出相应反应,如弹出通知或者显示悬浮窗。 6. **安全考虑**:在处理拨打电话功能时,开发者需要考虑到用户的安全...

    GTAndroidUserGuide.pdf

    - **悬浮窗设置**:允许用户自定义悬浮窗的外观和行为。 - **日志设置**:可以调整日志的级别、保存位置等。 - **Profiler功能**:提供了性能分析工具,用于深入分析AUT的性能瓶颈。 #### 十一、日志功能 - **GT...

    android引导用户开启自启动权限的方法

    2. 使用悬浮窗口:在授权页面弹出一个悬浮窗口,提示用户授权。 解决问题3:小米弹窗始终无法显示 小米弹窗始终无法显示,可以使用以下方法: 1. 使用小米的授权页面:使用小米的授权页面,弹出授权页面。 2. ...

Global site tag (gtag.js) - Google Analytics