dialog必须依附于activity吗

2023-11-08 13:30

本文主要是介绍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/370178

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

[置顶] 你必须非常努力,才能看起来毫不费力!(愿与君共勉)

有一群人,他们积极自律,每天按计划行事,有条不紊;他们不张扬,把自己当成最卑微的小草,等待着人生开出花朵的那天。他们早晨5点多起来健身,你在睡觉;7点开始享受丰盛的早餐,蛋白质维生素淀粉粗纤维样样俱全,为新的一天起了一个好头,当他们收拾妥当准备开始一整天的工作时,你还在睡觉;          他们用上午的高效时间完成了一个又一个任务,甚至发现的新的商机,发现了有可能给人生带来改观的机遇

vue el-dialog嵌套解决无法点击问题

产生原因: 当你在 el-dialog 上嵌套另一个 el-dialog 窗口时,可能会遇到内部对话框无法点击的问题。这通常是由于嵌套对话框的遮罩层(overlay)或其他样式问题造成的。 解决方案: 如果你的 el-dialog 组件支持 append-to-body 属性,你可以将对话框附加到 body 元素上,以避免 z-index 问题。 <template><el-dialo

小米9 从后台回到前台后 Dialog不显示 只有半透明的背景

最近用自定义Dialog 展示一些提示语,用小米测试时发现在弹出DialogAPP恰好在后台时,再次打开APP,界面上没有 DIalog 的弹框,但是有半透明的背景,点击返回也关不掉,只有关闭页面才会恢复正常,这个情况暂时只在小米上出现,最后找到了问题记录一下。 自定义Dialog原代码有一段是这样 dialog.getWindow().setGravity(Gravity.CENTER

LeakCanary测试app内存泄露+registerActivityLifecycleCallbacks管理Activity的生命周期

public class MyApplication extends Application {private String tag = "MyApplication";private static Stack<Activity> activityStack;//检测内存泄露private RefWatcher refWatcher;@Overridepublic void onCreate()

android studio怎么修改创建的Activity的模板?

1.找到android studio的安装目录,如下图,找到对应文件,修改EmptyActivity的模板。 2.修改成如下: 3.新建的EmptyActivity的默认代码如下:

linux 使用ffpmeg 发现转化目标必须是一个路径

一直有个疑惑  就是使用ffpmeg转码时,源文件和目标文件到底可以传URL地址还是必须为路径    下面就将实验 请看如下代码: 当源文件为一个URL地址时 ,目录为地址时  转码不成功 /usr/local/ffmpeg/bin/ffmpeg --ss 00:00:00 -t 0.01 -i http://www.baidu.com/1.mp4 -y -q:v 2 -f image2 h

从新手到大师:Java并发编程你必须知道的那些事!

文章目录 1 进程和线程的区别?2 如何创建一个线程实例并且运行它?3 Runnable 和 Callable 接口有什么区别?它们是如何使用的?4 方法定义中 synchronized 关键字的含义是什么?静态方法?在一个块之前 ? 1 进程和线程的区别? 进程是独立的执行单元,拥有自己的资源和内存,而线程是在进程内的执行单元,共享进程的资源。线程可以高效地执行任务,但需

程序猿必须知道的一些有用的(外国)网站

在学习计算机科学(CS)时,必须知道一些有用的网站,以便随时掌握信息,了解技术前沿和学习新技术。下面是你应该访问的一些网站的不详尽的列表,一旦我得到了另一个链接,这个列表就会被更新,但是你也可以添加你知道的网站来做贡献。 索引 当你遇到困境时 新闻 初学者的编码实践 给那些想开始一个小项目却找不到点子的人 一般编码建议 编码风格 一般工具 面试的准备

Activity转屏重建之 Activity.onConfigurationChanged

偶尔也会遇到由于转屏引起的一些问题。 有些时候,并不希望由于转屏使得Activity取重建。 再如键盘消失后的重建。 下面以一个demo为例子,小小总结一下用法。 如果想在转屏后,屏幕上立马打印出当前处于什么横竖屏状态 1.都知道有个属性android:configChanges可以用来定义什么情况下可以使得Activity不会restart。 android:configC