/* * Copyright (C) 2016 Facishare Technology Co., Ltd. All Rights Reserved. */ package com.lzf.easyfloat.permission.rom; import android.annotation.TargetApi; import android.app.AppOpsManager; import android.app.Fragment; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Binder; import android.os.Build; import android.util.Log; import android.widget.Toast; import com.lzf.easyfloat.permission.PermissionUtils; import java.lang.reflect.Method; public class HuaweiUtils { private static final String TAG = "HuaweiUtils"; /** * 检测 Huawei 悬浮窗权限 */ public static boolean checkFloatWindowPermission(Context context) { final int version = Build.VERSION.SDK_INT; if (version >= 19) { return checkOp(context, 24); //OP_SYSTEM_ALERT_WINDOW = 24; } return true; } /** * 去华为权限申请页面 */ public static void applyPermission(Fragment fragment) { try { Intent intent = new Intent(); //华为权限管理,跳转到指定app的权限管理位置需要华为接口权限,未解决 ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.addviewmonitor.AddViewMonitorActivity");//悬浮窗管理页面 intent.setComponent(comp); if (RomUtils.getEmuiVersion() == 3.1) { //emui 3.1 的适配 fragment.startActivityForResult(intent, PermissionUtils.requestCode); } else { //emui 3.0 的适配 comp = new ComponentName("com.huawei.systemmanager", "com.huawei.notificationmanager.ui.NotificationManagmentActivity");//悬浮窗管理页面 intent.setComponent(comp); fragment.startActivityForResult(intent, PermissionUtils.requestCode); } } catch (SecurityException e) { Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //华为权限管理 ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity"); //华为权限管理,跳转到本app的权限管理页面,这个需要华为接口权限,未解决 // 悬浮窗管理页面 intent.setComponent(comp); fragment.startActivityForResult(intent, PermissionUtils.requestCode); Log.e(TAG, Log.getStackTraceString(e)); } catch (ActivityNotFoundException e) { /** * 手机管家版本较低 HUAWEI SC-UL10 */ Intent intent = new Intent(); //权限管理页面 android4.4 ComponentName comp = new ComponentName("com.Android.settings", "com.android.settings.permission.TabItem"); //此处可跳转到指定app对应的权限管理页面,但是需要相关权限,未解决 intent.setComponent(comp); fragment.startActivityForResult(intent, PermissionUtils.requestCode); e.printStackTrace(); Log.e(TAG, Log.getStackTraceString(e)); } catch (Exception e) { //抛出异常时提示信息 Toast.makeText(fragment.getActivity(), "进入设置页面失败,请手动设置", Toast.LENGTH_LONG).show(); Log.e(TAG, Log.getStackTraceString(e)); } } @TargetApi(Build.VERSION_CODES.KITKAT) 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; } }