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吗相关推荐
- dialog 弹框时activity生命周期调用过程
dialog 弹框时activity生命周期调用过程 这个问题,分两部分 在普通activity弹框dialog,activity的onPause方法会被调用吗? activity a中给dialog ...
- android service中显示一个dialog
转自:http://blog.csdn.net/huxueyan521/article/details/8954844 dialog是依附于activity存在的.但是app中经常需要使用以下的情况, ...
- Android中Activity、Window、ViewRootImpl与子线程更新UI
三者层级关系 1.Window Window是一个抽象类,唯一的实现类是PhoneWindow Window分为三种类型应用Window.子Window.系统Window.子Window无法独立存在必 ...
- service中显示一个dialog
dialog是依附于activity存在的.但是app中经常需要使用以下的情况,在service中做一些后台操作,在某个临界条件满足时,显示一个dialog告知用户. 这时dialog无法直接从ser ...
- android dialog service,Service中弹出Dialog
dialog是依附于activity存在的.但是app中经常需要使用以下的情况,在service中做一些后台操作,在某个临界条件满足时,显示一个dialog告知用户. 这时dialog无法直接从ser ...
- ProgressDialog的hide()和dismiss()方法
在使用ProgressDialog作为网络加载数据的请求过程中,当数据加载完成,笔者很自然的将ProgressDialog调用了hide()方法,在当前activity退出时,遇到问题了android ...
- Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析
[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...
- android activity获取dialog对象,Android开发笔记之:Dialog的使用详解
Dialog是任何系统都必须有的一个控件,作为辅助窗口,用于显示一些消息,或请求用户采取一引起操作等. 在Android中也不例外,基本使用可能参看文档. 使用时的注意事项1. BACK键能取消掉对话 ...
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
1 背景 之所以写这一篇博客的原因是因为之前有写过一篇<Android应用setContentView与LayoutInflater加载解析机制源码分析>, 然后有人在文章下面评论和微博 ...
- (转) Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
转载[工匠若水 http://blog.csdn.net/yanbober ] 1 背景 之所以写这一篇博客的原因是因为之前有写过一篇<Android应用setContentView与Layou ...
最新文章
- ninject 的 实现 的 理解
- 论文笔记:PPFNet
- 软件工程概论 课堂练习【空调公司维修服务流程】
- vant input框禁止调用手机键盘_【案例分享】适应网银等密码键盘的解决方案
- ES6的Proxy对象
- html加载富文本_富文本图片懒加载解决方案
- Hadoop中的一些基本操作
- python字符串出栈方法_Python学习之路_day_04(字符串与列表的内置方法)
- 使用 Visual Studio 创建 .NET 类库
- 数据可视化里 边框图片
- 计算机重新启动进不去系统,电脑关机重启进不了系统怎么办
- Unity获取手机app列表《三》安卓端
- 初识html及工具的使用
- JME sdk中的中文乱码(全是方框)的解决办法
- 程序依赖图(Program Dependency Graph)-(PDG)
- EAUML日拱一卒-微信小程序实战:位置闹铃 (5)-显示所在位置的信息
- 远程连接桌面到ubuntu登录闪退
- ABP官方文档(三)【模块系统】
- 即便您是个跑龙套的甲乙丙丁,也该认真对待您自个的角色
- 第15章、布局Layouts之TableLayout表格布局(从零开始学Android)