美文网首页
悬浮窗总结

悬浮窗总结

作者: 鲜果时光 | 来源:发表于2017-01-13 16:53 被阅读133次

    学习内容地址:
    http://blog.csdn.net/self_study/article/details/52859790

    版本适配:
    在4.4之前,悬浮窗是不用判断权限的,我们可以直接使用addview 来添加悬浮窗的。
    4.4——5.1.1 各个手机厂商根据自己的需求做了定制处理。
    6.0以后 google 做了统一处理。
    解决办法:
    1.跳转到权限界面,让用户手动设置。
    2.使用其他方式的悬浮窗口。
    用户手动设置:
    1.判断版本,根据版本来判断悬浮窗权限是否开启。
    2.跳转到权限设置界面。

          //手机的权限判断:
          private static boolean checkOp(Context context, int op) {
              final int version = Build.VERSION.SDK_INT;
              if (version >= 19) {
                AppOpsManager manager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
                try {
                    Class clazz = AppOpsManager.class;
                    Method method = clazz.getDeclaredMethod("checkOp", int.class, int.class, String.class);
                    return AppOpsManager.MODE_ALLOWED == (int)method.invoke(manager, op, Binder.getCallingUid(), context.getPackageName());
                } catch (Exception e) {
                    Log.e(TAG, Log.getStackTraceString(e));
                }
              } else {
                Log.e(TAG, "Below API 19 cannot invoke!");
              }
              return false;
          }
    
    
      
          //6.0以上手机
          //判断权限是否开启
            Settings.canDrawOverlays(this);
          // 跳转到权限设置界面
          private void requestAlertWindowPermission() {
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, REQUEST_CODE);
          }
    
             //小米MI3 手机 android4.4.4 MIUI版本8.6.7.28
              Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
                intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
                intent.putExtra("extra_pkgname", context.getPackageName());
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                if (isIntentAvailable(intent, context)) {
                    context.startActivity(intent);
                }
    

    之后遇到再适配其他机型

    使用其他方式弹出悬浮窗:
    我们一般使用的悬浮窗的type是WindowManager.LayoutParams.TYPE_SYSTEM_ALERT的,需要要声明android.permission.SYSTEM_ALERT_WINDOW 如果使用WindowManager.LayoutParams.TYPE_TOAS 则可以绕过权限声明,也不需要设置权限

    本地代码 testapplock项目

    相关文章

      网友评论

          本文标题:悬浮窗总结

          本文链接:https://www.haomeiwen.com/subject/tgskbttx.html