IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> dialog必须依附于activity吗 -> 正文阅读

[移动开发]dialog必须依附于activity吗

android开发中悬浮窗被禁用,无权限开启悬浮窗的解决方案_xiao_ma123的专栏-CSDN博客首先,感谢这两篇博文http://blog.csdn.net/cankingapp/article/details/51569576 http://blog.csdn.net/cool_fuwei/article/details/53070232问题一:在安卓开发中处理悬浮窗权限时,发现魅族和小米手机无论android4.4.4、android5.1.1还是android6.0,权限manifeshttps://blog.csdn.net/siwujidan0125/article/details/53283876

是如果说有些情况下获取不到Activity对象,但是又想弹出Dialog呢?这时候用全局的Dialog是可以实现的。

只需要设置dialog为WindowManager.LayoutParams.TYPE_SYSTEM_ALERT类型

然后添加android.permission.SYSTEM_ALERT_WINDOW权限

1
2
3
4
5
6
7
8
9
10
Dialog dialog = new AlertDialog.Builder(activity.getApplicationContext())
        .setTitle("野猿新一")
        .setMessage("我是对话框内容啦")
        .create();
// 增加这句代码
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show();

// 然后在manifest中添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

/**
 * 判断悬浮窗权限
 *
 * @param context
 * @return
 */
@TargetApi(Build.VERSION_CODES.KITKAT)
public static boolean isFloatWindowOpAllowed(Context context) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 19) {
        return checkOp(context, 24);  // AppOpsManager.OP_SYSTEM_ALERT_WINDOW
    } else {
        if ((context.getApplicationInfo().flags & 1 << 27) == 1 << 27) {
            return true;
        } else {
            return false;
        }
    }
}

@TargetApi(Build.VERSION_CODES.KITKAT)
public 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<?> spClazz = Class.forName(manager.getClass().getName());
            Method method = manager.getClass().getDeclaredMethod("checkOp", int.class, int.class, String.class);
            int property = (Integer) method.invoke(manager, op,
                    Binder.getCallingUid(), context.getPackageName());
            Log.e("399", " property: " + property);

            if (AppOpsManager.MODE_ALLOWED == property) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        Log.e("399", "Below API 19 cannot invoke!");
    }
    return false;
}



/**
 * 请求用户给予悬浮窗的权限
 */
public void requestPermission(Context context) {
    if (!isFloatWindowOpAllowed(context)) {//已经开启
        openSetting(context);
    }
}


/**
 * 打开权限设置界面
 */
public void openSetting(Context context) {
    try {
        Intent localIntent = new Intent(
                "miui.intent.action.APP_PERM_EDITOR");
        localIntent.setClassName("com.miui.securitycenter",
                "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
        localIntent.putExtra("extra_pkgname", context.getPackageName());
        localIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(localIntent);
        ParachuteLog.d(TAG,"启动小米悬浮窗设置界面");
    } catch (ActivityNotFoundException localActivityNotFoundException) {
        Intent intent1 = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Uri uri = Uri.fromParts("package", context.getPackageName(), null);
        intent1.setData(uri);
        context.startActivity(intent1);
        ParachuteLog.d(TAG,"启动悬浮窗界面");
    }
    Toast.makeText(context, "请开启应用显示悬浮窗权限!", Toast.LENGTH_SHORT).show();

}


public void showAgreement(Context context, AgreementDialog.AgreementCallback agreementCallback){
    if(context == null){
        return;
    }
    if(!(context instanceof Activity)) {
        if ("Xiaomi".equals(Build.MANUFACTURER)) {//小米手机
            ParachuteLog.d(TAG, "小米手机");
            requestPermission(context);
        } else if ("Meizu".equals(Build.MANUFACTURER)) {//魅族手机
            ParachuteLog.d(TAG, "魅族手机");
            requestPermission(context);
        } else {//其他手机
            ParachuteLog.d(TAG, "其他手机");
            if (Build.VERSION.SDK_INT >= 23) {
                if (!Settings.canDrawOverlays(context)) {
                    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(intent);
                    Toast.makeText(context, "请开启应用显示悬浮窗权限!", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

    String time = SPUtils.get(context, "agreement_showtime", "0");
    ParachuteLog.d(TAG, "  get time =" + time);
    if(System.currentTimeMillis()>Long.valueOf(time)){
        final AgreementDialog dialog = new AgreementDialog(context);
        if(!(context instanceof Activity)){
            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
        }
        dialog.setCallback(agreementCallback);
        dialog.getWindow().setDimAmount(0.88f);
        dialog.show();
    } else {
        if (agreementCallback != null) {
            String newtime = (String) SPUtils.getOrigin(context, "agreement_showtime", "0");
            boolean agree = (boolean) SPUtils.getOrigin(context, "agreement_agree", false);
            agreementCallback.agreeCallback(false,agree, newtime);

        }

    }


}

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:32:50  更:2022-03-16 22:34:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:06:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码