dialog必须依附于activity吗

2023-12-10 06:32

本文主要是介绍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);}}}

 

这篇关于dialog必须依附于activity吗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/476276

相关文章

vue+elementui--$message提示框被dialog遮罩层挡住问题解决

最近碰到一个先执行this.$message提示内容,然后接着弹出dialog带遮罩层弹框。那么问题来了,message提示框会默认被dialog遮罩层挡住,现在就是要解决这个问题。 由于都是弹框,问题肯定是出在z-index比重问题。由于用$message方式是写在js中而不是写在html中所以不是很好直接去改样式。 不过好在message组件中提供了customClass 属性,我们可以利用

必须记住的CSS选择器

选择器(selector)是CSS中很重要的概念,所有HTML语言中的标记都是通过不同的CSS选择器进行控制的。用户只需要通过选择器对不同的HTML标签进行控制,并赋予各种样式声明,即可实现各种效果。  1. * * { margin: 0; padding: 0; }   星号选择器用于选取页面中的所有元素,可用于快速清除所有元素的 margin 与 padding,但最好只在

滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

上周末,滴滴与360都开源了各自的插件化框架,VirtualAPK与RePlugin,作为一个插件化方面的狂热研究者,在周末就迫不及待的下载了Virtualapk框架来进行研究,本篇博客带来的是VirtualAPK原理解析的第一篇Activity管理,博客只是自己的理解,小弟才疏学浅,可能有很多理解不对的地方,欢迎各位大神指出。(看博客之前,请大家先下载VirtualVirtualAPKapk的项

宇哥强调!7月份必须开始强化阶段(附规划)

七月开始强化不晚,但是要开始了! 张宇老师说:七月,也就是暑假是大家学习的最佳时机,这个时候要大量的做题! 如果你是三月份开始备考的,那么到了七月份,基础应该复习的差不多了,现在刚好是六月中旬,马上就要七月份了。也该开始准备强化复习了,但是进入强化之前,我建议大家对基础进行一个收尾工作,因为毕竟前面学的知识点是很久以前的了,不复习一下,很容易就忘掉了。 给大家准备了一个list,可以按照这个

Android中如何动态的调整Dialog的背景深暗

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在 Android 开发中,当你使用 Dialog 或 DialogFragment 时,可以通过设置 Window 的背景变暗来突出它的可见性。这个效果是通过 backgroundDimAmount 属性来控制的。 那我们怎么动态设置backgroundDimAmou

【Android面试八股文】来说一说Activity,Window,View三者的联系和区别吧

文章目录 ActivityWindowView为什么需要 Window?Window和View的关系Activity与Window的关系示例流程图示总结扩展阅读 在Android应用程序开发中, Activity、Window 和 View 是构建用户界面的核心组件。它们之间有着紧密的联系,但角色和职责各不相同。下面是对它们联系和区别的详细解释: Ac

为什么 JakeWharton 建议:App 只要用到一个 Activity ?

我们来看看这条回答都提到了哪些内容,对 Activity 和 Fragment 之间的爱恨情仇有何独到的见解,凭什么能得到 JakeWharton 本尊的青睐有加。 因为 Activity 是一个程序入口。你可以将其视为 app 的一个 main 函数。站在用户的立场上,通常你进入 app 的方式可能包括以下几种: launcher 桌面程序(main 函数入口); 来自参数化 m

android中dialog工具类的实现(多种dialog的创建)

第一种:bitmapDialog的建立 javademo1: package com.demo.dialog;import android.app.Dialog;import android.content.Context;import android.graphics.Bitmap;import android.view.LayoutInflater;import android

Android Dialog去除蒙层/遮盖效果

UI新出了一个页面加载效果 如下图: 想当然用ProgressDialog实现完 效果如下: 这乌漆墨黑的什么鬼? 怎么办,Dialog默认有蒙层的,难道用Popupwindow再来一次?多方查证,终于找到解决方案,这里感谢:http://blog.csdn.net/daividtu/article/details/52875129 只需在代码中加一行设置: progressD

C++回调函数必须为静态函数的原因

一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 为了实现回调,我们必须把this