-
2021-04-23 09:31:35
// 判断客户是否开启通知,如果没开启,则跳转到设置页面,start var main = plus.android.runtimeMainActivity(); var pkName = main.getPackageName(); var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat"); var packageNames = NotificationManagerCompat.from(main); console.log(JSON.stringify(packageNames)); if (packageNames.areNotificationsEnabled()) { console.log('已开启通知权限'); }else{ uni.showModal({ title: '提示', content: '请先打开APP通知权限', showCancel: false, success: function (res) { if (res.confirm) { var Intent = plus.android.importClass('android.content.Intent'); var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');//可设置表中所有Action字段 intent.putExtra('android.provider.extra.APP_PACKAGE', pkName); main.startActivity(intent); } } }); } // 判断客户是否开启通知,如果没开启,则跳转到设置页面,end
建议把判断写在App.vue的onLaunch里。
更多相关内容 -
Android开发实现判断通知栏是否打开及前往设置页面的方法
2020-08-28 06:02:55主要介绍了Android开发实现判断通知栏是否打开及前往设置页面的方法,涉及Android通知栏的打开、判断、设置等相关操作技巧,需要的朋友可以参考下 -
js判断当前页面是否有消息提示框
2020-11-27 11:07:45js判断当前页面是否有消息提示框 最近遇到一个十分令人头疼的问题,折磨了我两天,终于搞定了,可能还是我太笨了,当时正在修改一个打印缺陷,当我点击保存后直接点击打印,此时会把打印的消息提示框打印出来,如图 ...js判断当前页面是否有消息提示框
最近遇到一个十分令人头疼的问题,折磨了我两天,终于搞定了,可能还是我太笨了,当时正在修改一个打印缺陷,当我点击保存后直接点击打印,此时会把打印的消息提示框打印出来,如图
想要把这个提示框隐藏掉,想过好多种方式:
1,使用timeout点击打印时延时几秒等消息框消失再打印,但是粗略的计算了一下,这个alert需要五六秒才会消失,如果在遇到网络慢的情况,实在不算一个好的办法,所以就pass掉了
2,因为这个消失提示是我们自定义的alert,他不会实际存在于页面中,但是通过消息弹出时在页面右键“检查”可以得到他的class名称(网页代码消息提示消失时也会自动消失)
此处尝试直接在jsp里定义此类display:none;结果失败,原因应该是由于这个div根本不存在于页面中
3,最后试了一下点击打印时在js里判断页面是否包含那个类名,有的话就隐藏,然后再进行打印,终于好用了,泪流满面
此处要感谢帮助我解决困难,提供思路的朋友,谢谢~ -
Android 8.0+通知栏(Notification)适配详解,判断通知权限是否打开,并跳转至通知管理页面
2020-05-22 12:19:03为何Android 8.0以上通知栏消息失效?为何模拟器上能显示真机却不行?这里面究竟藏着什么惊天秘密?且随我一探究竟!前不久因为API26(Android 8.0)以上的设备无法显示通知栏,所以网上查阅了比较多了资料,得出结论,API26以后引入了通知渠道这么个东西,然后就写了一篇问题对应的博文:Android 8.0通知栏(Notification)适配,在模拟上是完美运行,可是当我前两天安装到真机上测试时,咦?怎么又无效了?然后我就想着,是不是通知权限没打开?因为模拟器上很多权限的控制和真机上差别很大,我打开设置一看,还真是!那么本文就接着Android 8.0通知栏(Notification)适配作一个补充。
Android 10 真机测试效果:
判断通知权限是否打开
一行代码判断
我们要打开通知 管理页面 第一步当然是判断 通知权限是否打开了? ,打开了我们就不需要跳转到通知管理页面了,没打开我们才进行跳转。
这里我们用NotificationManagerCompat提供的 .areNotificationsEnabled() 方法来判断通知权限是否打开,返回的是boolean值
NotificationManagerCompat.from(this).areNotificationsEnabled()
注意:这个方法只适用于API19(Android 4.4)以上,API19以下会直接返回true,当然我们不是特殊开发也可以忽略了,毕竟现在市场上低于 Android4.4 的手机恐怕不好找,而且貌似Android4.4以下的对权限这块也没有太严格~
areNotificationsEnabled() 的源码(可忽略)
我们来看看 areNotificationsEnabled() 的源码,源码可以很清晰明朗地看到,API24以上直接调用
mNotificationManager.areNotificationsEnabled();
方法,而 API19 -API 23 则是通过反射的方式来获取,API 19 以下就直接返回 true 了/** * Returns whether notifications from the calling package are not blocked. */ public boolean areNotificationsEnabled() { if (Build.VERSION.SDK_INT >= 24) { return mNotificationManager.areNotificationsEnabled(); } else if (Build.VERSION.SDK_INT >= 19) { AppOpsManager appOps = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE); ApplicationInfo appInfo = mContext.getApplicationInfo(); String pkg = mContext.getApplicationContext().getPackageName(); int uid = appInfo.uid; try { Class<?> appOpsClass = Class.forName(AppOpsManager.class.getName()); Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class); Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); int value = (int) opPostNotificationValue.get(Integer.class); return ((int) checkOpNoThrowMethod.invoke(appOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); } catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | InvocationTargetException | IllegalAccessException | RuntimeException e) { return true; } } else { return true; } }
跳转到通知管理页面
通知权限判断完了当然是要根据判断结果来进行跳转了,上面我们可以知道
NotificationManagerCompat.from(this).areNotificationsEnabled()
是会返回 boolean 值的,true 代表权限已经打开,反之则没有打开,这里我们可以写一个 if 语句根据返回结果来进行判断,这里直接给一个现成的方法吧方法逻辑:
- 首先判断 通知权限是否打开
- 如果判断结果是:false(权限没打开),再进行当前手机的 API 判断
- 通过判断API,来调用不同的方法,实现跳转到应用通知设置的页面
private boolean intent(Context context) {//判断应用的通知权限是否打开,返回Boolean值 if (!NotificationManagerCompat.from(context).areNotificationsEnabled()) { Intent localIntent = new Intent(); //判断API,跳转到应用通知管理页面 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//8.0及以上 localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); localIntent.setData(Uri.fromParts("package", context.getPackageName(), null)); } else (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//8.0以下 localIntent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); localIntent.putExtra("app_package", context.getPackageName()); localIntent.putExtra("app_uid", context.getApplicationInfo().uid); } context.startActivity(localIntent); return false; } return true; }
补充
这里补充一下 Android 8.0 +的 Notification通知栏消息 的使用,相对于以前也只是加了一个NotificationChannel通知渠道,想要详细看的可以去我前一篇关于通知栏的博客:Android 8.0通知栏(Notification)适配
方法逻辑
- 首先通过上面的 通知权限判断 方法判断通知权限是否打开
- 打开了的话判断当前手机的API,如果是在 26 (Android 8.0)以上则多实例化一个NotificationChannel对象,并传入一个 ID(用户不可见,要保证id的唯一性) 和一个 Name(用户能看到) ,最后是一个通知的优先级,这里我设置的 高(IMPORTANCE_HIGH)
- 如果API 在 26 以下,我们则直接调用以前使用的方法即可,这样就可以兼容上下API了
public void show(Context context, String title, String msg) { if (intent(context)) { NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); Notification notification = null; if (Build.VERSION.SDK_INT >= 26) {//API26以上的方法 NotificationChannel channel = new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_HIGH); manager.createNotificationChannel(channel); notification = new Notification.Builder(context, "id") .setContentTitle(title) .setContentText(msg) .setSmallIcon(R.mipmap.img_icon) .build(); } else {//API26以下 notification = new Notification.Builder(context) .setContentTitle(title) .setContentText(msg) .setSmallIcon(R.mipmap.img_icon) .build(); } manager.notify(1, notification); } }
如果文章对你还算有点帮助,点个赞吧!
-
Android 判断当前应用是否开启消息通知
2022-03-03 09:35:23当APP有推送功能时,需要判断当前app在手机中是否开启了允许消息推送,否则即使添加了推送代码仍然收不到通知NotificationUtil.kt
object NotificationUtil { /** * 打开手机设置页面 * @param context Context */ fun setNotification(context: Context) { val enabled = isNotificationEnabled(context) if (!enabled) { val localIntent = Intent() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { localIntent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS localIntent.putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) localIntent.putExtra("app_uid", context.applicationInfo.uid) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { localIntent.action = "android.settings.APP_NOTIFICATION_SETTINGS" localIntent.putExtra("app_package", context.packageName) localIntent.putExtra("app_uid", context.applicationInfo.uid) } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { localIntent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS localIntent.addCategory(Intent.CATEGORY_DEFAULT) localIntent.data = Uri.parse("package:" + context.packageName) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) localIntent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS localIntent.data = Uri.fromParts("package", context.packageName, null) } else { localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) if (Build.VERSION.SDK_INT >= 9) { localIntent.action = "android.settings.APPLICATION_DETAILS_SETTINGS" localIntent.data = Uri.fromParts("package", context.packageName, null) } else if (Build.VERSION.SDK_INT <= 8) { localIntent.action = Intent.ACTION_VIEW localIntent.setClassName( "com.android.settings", "com.android.setting.InstalledAppDetails" ) localIntent.putExtra( "com.android.settings.ApplicationPkgName", context.packageName ) } } context.startActivity(localIntent) } } /** * 判断当前app在手机中是否开启了允许消息推送 * @param mContext Context * @return Boolean */ fun isNotificationEnabled(mContext: Context): Boolean { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val mNotificationManager = mContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager var channel = mNotificationManager.getNotificationChannel(PortalCode.ChannelId) !(!mNotificationManager.areNotificationsEnabled() || channel.importance == NotificationManager.IMPORTANCE_NONE) } else if (Build.VERSION.SDK_INT >= 24) { val mNotificationManager = mContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager mNotificationManager.areNotificationsEnabled() } else if (Build.VERSION.SDK_INT >= 19) { val CHECK_OP_NO_THROW = "checkOpNoThrow" val OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION" val appOps = mContext.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager val appInfo = mContext.applicationInfo val pkg = mContext.applicationContext.packageName val uid = appInfo.uid try { val appOpsClass = Class.forName(AppOpsManager::class.java.name) val checkOpNoThrowMethod = appOpsClass.getMethod( CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String::class.java ) val opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION) val value = opPostNotificationValue[Int::class.java] as Int (checkOpNoThrowMethod.invoke(appOps, value, uid, pkg) as Int == AppOpsManager.MODE_ALLOWED) } catch (e: ClassNotFoundException) { true } catch (e: NoSuchMethodException) { true } catch (e: NoSuchFieldException) { true } catch (e: InvocationTargetException) { true } catch (e: IllegalAccessException) { true } catch (e: RuntimeException) { true } } else { true } } }
调用:
if (NotificationUtil.isNotificationEnabled(this)) { //当前app允许消息通知 } else { AlertDialog.Builder() .message("为了您能收到推送通知请点击确定开始设置") .okButtonText("确定") .build().apply { setOkBtnClickListener { NotificationUtil.setNotification(this@CurMainActivity) } show(this@CurMainActivity) } }
-
Android 判断通知栏是否打开及前往设置页面
2016-12-16 18:22:08项目中用到日程提醒功能,如果应用的通知栏没有打开,则需要提示用户前去打开通知栏,判断通知栏是否打开代码如下: private boolean isNotificationEnabled(Context context) { String CHECK_OP_NO_THROW = ... -
wordpress模板页面判断函数(自己整理)
2020-09-29 00:19:36wordpress模板页面判断函数,自己平时用到的整理一下,现在拿出来与大家分享,以备不时之需 -
Android 判断用户是否开启了悬浮通知(横幅通知)
2021-06-08 11:18:06通常我们在开发即时通讯App时,...设置界面1、判断用户是否开启了悬浮通知(横幅通知)通过通知渠道ID,获取通知重要性级别,从而知晓是否开启了悬浮通知(横幅通知)NotificationManager mNotificationManager = (Noti... -
Android 判断当前应用是否开启消息通知(支持9.0)
2021-06-07 14:35:10我就偷懒了,直接贴代码了这个我写在MainActivity的onCreate()里面的,相当...= Build.VERSION_CODES.KITKAT) {//判断是否需要开启通知栏功能NotificationUtil.OpenNotificationSetting(mContext, new NotificationU... -
android app通知栏权限状态判断及跳转状态栏设置页面
2019-08-08 12:21:32public static boolean isPermissionOpen(Context context) { //判断是否有打开通知栏权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return NotificationManagerCompat.from(context).... -
android判断是否打开了通知权限
2021-06-07 03:31:05context.setText("检测到您没有打开通知权限,是否去打开"); TextView confirm = (TextView) view.findViewById(R.id.btn_confirm); confirm.setText("确定"); confirm.setOnClickListener(new View.... -
消息通知页面.html
2021-06-11 04:29:17消息通知页面$axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; };$axure.utils.getOtherPath = function() { return 'resources/Other.html'; };$axure.utils.... -
Android中判断是否打开消息通知
2020-02-29 14:41:31我们开发中经常要接入类似极光推送等推送的功能,但是有时候我们接入的各部分都正常,就是没有通知栏的通知。...首先我们要判断用户是否打开了权限,这个一般在首页进行判断 private boolean isNot... -
判断应用是否开启通知栏及跳转到设置页面
2017-04-19 10:14:27如果不去手动打开状态栏可以获取通知的设置,就算发送通知也看不到消息,但是小米手机就没事,有人说获取手机型号进行适配,但是安卓手机机型太多,那样做是在是头疼,后来有人说可以判断通知栏是否打开,这个方法... -
js判断用户是否离开当前页面
2018-11-28 16:05:39通过文档的(点击,按键)事件判断用户是否在操作,看你的操作是否有鼠标滑来滑去的操作,并且不需要按键和点击来完成的话,建议在增加多一个鼠标移动事件 在多长时间内如果用户都没有触发这些事件的话,就判定为... -
判断App通知是否被屏蔽,弹窗提醒并提供跳转到对应开启通知页面的按钮
2018-05-17 15:05:161、全新、升级安装后判断系统是否屏蔽App的通知。 2、如果通知被屏蔽,弹出提醒开启通知的弹窗。 3、点击弹窗中“立即开启”按钮,跳转到系统对应的此App的通知设置界面。 解决方法: 1、判断通知App的通知功能... -
iOS 判断当前页面是否显示
2016-05-09 11:36:05有时候需要判断当前页面是否显示。构想一个场景:当用户使用app的时候,手机锁屏后解开屏幕锁,手机app进入前台。需要判断当前页面a还是页面b呈现给了用户。如果页面a呈现给用户,那么需要请求页面a的数据,如果页面... -
Android 进阶之旅 | 打开通知设置页面
2021-06-02 23:25:16image.png在打开app的时候,提示用户打开通知设置页面 , 首先我们要判断是否开启了当前应用的通知package com.example.notificationtest;import java.lang.reflect.Field;import java.lang.reflect.Method;import ... -
js判断页面加载完毕方法【js页面加载后执行的几种方式】
2020-06-26 11:25:00// (1)、页面所有内容加载完成执行 window.onload = function(){ } // (2)、页面加载完毕 document.onreadystatechange = function(){ if(doucument.readyState == 'complete'){ // 页面加载完毕 } } 二、... -
关于Android中点击通知栏的通知启动Activity问题解决
2020-08-31 05:49:58主要介绍了关于解决Android中点击通知栏的通知启动Activity问题的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。 -
uni-app安卓版(android)如何判断和打开消息通知权限
2021-06-14 10:25:38uni-app如何判断和打开消息通知权限 本文章向大家介绍uniapp安卓判断通知权限(并通过版本进行设置跳转),主要包括uniapp安卓判断通知权限(并通过版本进行设置跳转)使用实例、应用技巧、基本知识点总结和需要注意... -
Android跳转到系统通知管理页面
2020-08-26 18:07:02// 根据通知栏开启权限判断结果,判断是否需要提醒用户跳转系统通知管理页面 Intent intent = new Intent(); intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); //这种方案. -
Android 点击通知栏消息打开activity,并判断app是否运行
2018-10-22 11:01:00android的通知栏消息点击事件如果是打开一个activity时,我们要考虑两种情况: &amp;amp;gt; 应用正在前台运行。&amp;amp;gt; &amp;amp;gt; 应用已退出。&amp;amp;gt; 如果是... -
安卓开发,点击通知栏进入指定页面及判断App是否启动
2017-09-11 09:50:45点击常驻通知栏图标时,是重新启动了应用,我想实现的是如果应用已经启动则返回已经启动的应用,否则新启动该应用。 可是这个要怎么实现呢,应该是要设置一下Intent,上网查了一下,果然是Intent要进行一些设置:... -
Android获取应用通知栏权限,并跳转通知设置页面(全版本适配)
2019-10-25 11:43:29现在一般应用都需要集成推送功能,给用户推送一些相关的消息,这就需要应用取得应用通知栏权限,但是目前国内大部分厂商默认都是不开启通知栏权限的,所以在需要的时候,就要先检测是否开启通知栏权限,如果未开启,...