精华内容
下载资源
问答
  • 判断页面是否有新通知
    千次阅读
    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开发实现判断通知是否打开及前往设置页面的方法,涉及Android通知栏的打开、判断、设置等相关操作技巧,需要的朋友可以参考下
  • js判断当前页面是否有消息提示框 最近遇到一个十分令人头疼的问题,折磨了我两天,终于搞定了,可能还是我太笨了,当时正在修改一个打印缺陷,当我点击保存后直接点击打印,此时会把打印的消息提示框打印出来,如图 ...

    js判断当前页面是否有消息提示框

    最近遇到一个十分令人头疼的问题,折磨了我两天,终于搞定了,可能还是我太笨了,当时正在修改一个打印缺陷,当我点击保存后直接点击打印,此时会把打印的消息提示框打印出来,如图在这里插入图片描述
    想要把这个提示框隐藏掉,想过好多种方式:
    1,使用timeout点击打印时延时几秒等消息框消失再打印,但是粗略的计算了一下,这个alert需要五六秒才会消失,如果在遇到网络慢的情况,实在不算一个好的办法,所以就pass掉了
    2,因为这个消失提示是我们自定义的alert,他不会实际存在于页面中,但是通过消息弹出时在页面右键“检查”可以得到他的class名称(网页代码消息提示消失时也会自动消失)
    在这里插入图片描述
    此处尝试直接在jsp里定义此类display:none;结果失败,原因应该是由于这个div根本不存在于页面中
    3,最后试了一下点击打印时在js里判断页面是否包含那个类名,有的话就隐藏,然后再进行打印,终于好用了,泪流满面
    在这里插入图片描述
    此处要感谢帮助我解决困难,提供思路的朋友,谢谢~

    展开全文
  • 为何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);
        }
    
    }
    

    如果文章对你还算有点帮助,点个赞吧!

    在这里插入图片描述

    展开全文
  • 当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)
            }
    }
    
    展开全文
  • 项目中用到日程提醒功能,如果应用的通知栏没有打开,则需要提示用户前去打开通知栏,判断通知是否打开代码如下: private boolean isNotificationEnabled(Context context) { String CHECK_OP_NO_THROW = ...
  • wordpress模板页面判断函数,自己平时用到的整理一下,现在拿出来与大家分享,以备不时之需
  • 通常我们在开发即时通讯App时,...设置界面1、判断用户是否开启了悬浮通知(横幅通知)通过通知渠道ID,获取通知重要性级别,从而知晓是否开启了悬浮通知(横幅通知)NotificationManager mNotificationManager = (Noti...
  • 我就偷懒了,直接贴代码了这个我写在MainActivity的onCreate()里面的,相当...= Build.VERSION_CODES.KITKAT) {//判断是否需要开启通知栏功能NotificationUtil.OpenNotificationSetting(mContext, new NotificationU...
  • public static boolean isPermissionOpen(Context context) { //判断是否有打开通知栏权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return NotificationManagerCompat.from(context)....
  • context.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....
  • 我们开发中经常要接入类似极光推送等推送的功能,但是时候我们接入的各部分都正常,就是没有通知栏的通知。...首先我们要判断用户是否打开了权限,这个一般在首页进行判断 private boolean isNot...
  • 如果不去手动打开状态栏可以获取通知的设置,就算发送通知也看不到消息,但是小米手机就没事,人说获取手机型号进行适配,但是安卓手机机型太多,那样做是在是头疼,后来人说可以判断通知是否打开,这个方法...
  • js判断用户是否离开当前页面

    千次阅读 2018-11-28 16:05:39
    通过文档的(点击,按键)事件判断用户是否在操作,看你的操作是否有鼠标滑来滑去的操作,并且不需要按键和点击来完成的话,建议在增加多一个鼠标移动事件 在多长时间内如果用户都没有触发这些事件的话,就判定为...
  • 1、全新、升级安装后判断系统是否屏蔽App的通知。 2、如果通知被屏蔽,弹出提醒开启通知的弹窗。 3、点击弹窗中“立即开启”按钮,跳转到系统对应的此App的通知设置界面。 解决方法: 1、判断通知App的通知功能...
  • iOS 判断当前页面是否显示

    千次阅读 2016-05-09 11:36:05
    时候需要判断当前页面是否显示。构想一个场景:当用户使用app的时候,手机锁屏后解开屏幕锁,手机app进入前台。需要判断当前页面a还是页面b呈现给了用户。如果页面a呈现给用户,那么需要请求页面a的数据,如果页面...
  • image.png在打开app的时候,提示用户打开通知设置页面 , 首先我们要判断是否开启了当前应用的通知package com.example.notificationtest;import java.lang.reflect.Field;import java.lang.reflect.Method;import ...
  • // (1)、页面所有内容加载完成执行 window.onload = function(){ } // (2)、页面加载完毕 document.onreadystatechange = function(){ if(doucument.readyState == 'complete'){ // 页面加载完毕 } } 二、...
  • 主要介绍了关于解决Android中点击通知栏的通知启动Activity问题的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
  • uni-app如何判断和打开消息通知权限 本文章向大家介绍uniapp安卓判断通知权限(并通过版本进行设置跳转),主要包括uniapp安卓判断通知权限(并通过版本进行设置跳转)使用实例、应用技巧、基本知识点总结和需要注意...
  • Android跳转到系统通知管理页面

    千次阅读 2020-08-26 18:07:02
    // 根据通知栏开启权限判断结果,判断是否需要提醒用户跳转系统通知管理页面 Intent intent = new Intent(); intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); //这种方案.
  • android的通知栏消息点击事件如果是打开一个activity时,我们要考虑两种情况: &amp;amp;amp;gt; 应用正在前台运行。&amp;amp;amp;gt; &amp;amp;amp;gt; 应用已退出。&amp;amp;amp;gt; 如果是...
  • 点击常驻通知栏图标时,是重新启动了应用,我想实现的是如果应用已经启动则返回已经启动的应用,否则启动该应用。  可是这个要怎么实现呢,应该是要设置一下Intent,上网查了一下,果然是Intent要进行一些设置:...
  • 现在一般应用都需要集成推送功能,给用户推送一些相关的消息,这就需要应用取得应用通知栏权限,但是目前国内大部分厂商默认都是不开启通知栏权限的,所以在需要的时候,就要先检测是否开启通知栏权限,如果未开启,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,076
精华内容 40,830
关键字:

判断页面是否有新通知