精华内容
下载资源
问答
  • 当APP有推送功能时,需要判断当前app在手机中是否开启了允许消息推送,否则即使添加了推送代码仍然收不到通知,所以需要要么跳转至设置界面设置,要么自定义消息通知。 效果图 方法一:跳转到应用程序设置界面...

    前言

    当APP有推送功能时,需要判断当前app在手机中是否开启了允许消息推送,否则即使添加了推送代码仍然收不到通知,所以需要要么跳转至设置界面设置,要么自定义消息通知。

    效果图

     

    方法一:跳转到应用程序设置界面

    1、将NotificationSetUtil.java类复制到项目中

    package com.php.project.notificationsetutildemo.utils;
    
    import android.app.AppOpsManager;
    import android.content.Context;
    import android.content.Intent;
    import android.content.pm.ApplicationInfo;
    import android.net.Uri;
    import android.os.Build;
    import android.support.annotation.RequiresApi;
    import android.support.v4.app.NotificationManagerCompat;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    /**
     * Created by peihp
     * Used 判断是否开启消息通知,没有开启的话跳转到手机系统设置界面
     */
    public class NotificationSetUtil {
    
        //判断是否需要打开设置界面
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        public static void OpenNotificationSetting(Context context, OnNextLitener mOnNextLitener) {
            if (!isNotificationEnabled(context)) {
                gotoSet(context);
            } else {
                if (mOnNextLitener != null) {
                    mOnNextLitener.onNext();
                }
            }
        }
    
        //判断该app是否打开了通知
        /**
         * 可以通过NotificationManagerCompat 中的 areNotificationsEnabled()来判断是否开启通知权限。NotificationManagerCompat 在 android.support.v4.app包中,是API 22.1.0 中加入的。而 areNotificationsEnabled()则是在 API 24.1.0之后加入的。
         * areNotificationsEnabled 只对 API 19 及以上版本有效,低于API 19 会一直返回true
         * */
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        public static boolean isNotificationEnabled(Context context) {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
                NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
                boolean areNotificationsEnabled = notificationManagerCompat.areNotificationsEnabled();
                return areNotificationsEnabled;
            }
    
            String CHECK_OP_NO_THROW = "checkOpNoThrow";
            String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
    
            AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
            ApplicationInfo appInfo = context.getApplicationInfo();
            String pkg = context.getApplicationContext().getPackageName();
            int uid = appInfo.uid;
    
            Class appOpsClass = null;
            /* Context.APP_OPS_MANAGER */
            try {
                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 = (Integer) opPostNotificationValue.get(Integer.class);
                return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
    
        }
    
        //打开手机设置页面
        /**
         * 假设没有开启通知权限,点击之后就需要跳转到 APP的通知设置界面,对应的Action是:Settings.ACTION_APP_NOTIFICATION_SETTINGS, 这个Action是 API 26 后增加的
         * 如果在部分手机中无法精确的跳转到 APP对应的通知设置界面,那么我们就考虑直接跳转到 APP信息界面,对应的Action是:Settings.ACTION_APPLICATION_DETAILS_SETTINGS*/
        private static void gotoSet(Context context) {
    
            Intent intent = new Intent();
            if (Build.VERSION.SDK_INT >= 26) {
                // android 8.0引导
                intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
                intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
            } else if (Build.VERSION.SDK_INT >= 21) {
                // android 5.0-7.0
                intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
                intent.putExtra("app_package", context.getPackageName());
                intent.putExtra("app_uid", context.getApplicationInfo().uid);
            } else {
                // 其他
                intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
                intent.setData(Uri.fromParts("package", context.getPackageName(), null));
            }
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    
        /*=====================添加Listener回调================================*/
        public interface OnNextLitener {
            /**
             * 不需要设置通知的下一步
             */
            void onNext();
        }
    
        private OnNextLitener mOnNextLitener;
    
        public void setOnNextLitener(OnNextLitener mOnNextLitener) {
            this.mOnNextLitener = mOnNextLitener;
        }
    }
    

    使用方法:

    package com.php.project.notificationsetutildemo;
    
    import android.content.Context;
    import android.os.Build;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.Toast;
    
    import com.php.project.notificationsetutildemo.utils.NotificationSetUtil;
    
    public class MainActivity extends AppCompatActivity {
    
        private Context mContext;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mContext = this;
    
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                //判断是否需要开启通知栏功能
                NotificationSetUtil.OpenNotificationSetting(mContext, new NotificationSetUtil.OnNextLitener() {
                    @Override
                    public void onNext() {
                        Toast.makeText(mContext,"已开启通知权限",Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }
    }

     

    方法二:自定义消息通知

    新建Toast.java

    package com.php.utils.ui.toast;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.AppOpsManager;
    import android.app.Application;
    import android.content.Context;
    import android.content.pm.ApplicationInfo;
    import android.os.Build;
    import android.support.annotation.RequiresApi;
    import android.support.v4.app.NotificationManagerCompat;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.TextView;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    import com.php.notification.R;
    
    
    
    public class Toast {
        private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
        private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
        private static int checkNotification = 0;
        private static Object mToast;
        private static boolean flag = true;
        private Toast(Context context, String message, int duration) {
            if(context instanceof Application)
                checkNotification = 0;
            else
                checkNotification = isNotificationEnabled(context) ? 0 : 1;
            if (checkNotification == 1) {
                try {
                    mToast = EToast2.makeText(context, message, duration);
                } catch (Exception e) {
                    e.printStackTrace();
                    synchronized (CHECK_OP_NO_THROW) {
                        if(flag){
                            flag = false;
                            View toastRoot = LayoutInflater.from(context).inflate(R.layout.toast, null);
                            TextView tv = (TextView) toastRoot.findViewById(R.id.toast_notice);
                            tv.setText(message);
                            mToast = android.widget.Toast.makeText(context,"",duration);
                            ((android.widget.Toast) mToast).setView(toastRoot);
                            ((android.widget.Toast) mToast).setGravity(Gravity.BOTTOM, 0, 200);
                        }
                    }
                    ((TextView)((android.widget.Toast) mToast).getView().findViewById(R.id.toast_notice)).setText(message);
                }
            } else {
    //            mToast = android.widget.Toast.makeText(context, message, duration);
                synchronized (CHECK_OP_NO_THROW) {
                    if(flag){
                        flag = false;
                        View toastRoot = LayoutInflater.from(context).inflate(R.layout.toast, null);
                        TextView tv = (TextView) toastRoot.findViewById(R.id.toast_notice);
                        tv.setText(message);
                        mToast = android.widget.Toast.makeText(context,"",duration);
                        ((android.widget.Toast) mToast).setView(toastRoot);
                        ((android.widget.Toast) mToast).setGravity(Gravity.BOTTOM, 0, 200);
                    }
                }
                ((TextView)((android.widget.Toast) mToast).getView().findViewById(R.id.toast_notice)).setText(message);
            }
        }
        private Toast(Context context, int resId, int duration) {
            if(context instanceof Application)
                checkNotification = 0;
            else
                checkNotification = isNotificationEnabled(context) ? 0 : 1;
            if (checkNotification == 1 && context instanceof Activity) {
                mToast = EToast2.makeText(context, resId, duration);
            } else {
                mToast = android.widget.Toast.makeText(context, resId, duration);
            }
        }
    
        public static Toast makeText(Context context, String message, int duration) {
            return new Toast(context,message,duration);
        }
        public static Toast makeText(Context context, int resId, int duration) {
            return new Toast(context,resId,duration);
        }
    
        public void show() {
            if(mToast instanceof EToast2){
                ((EToast2) mToast).show();
            }else if(mToast instanceof android.widget.Toast){
                ((android.widget.Toast) mToast).show();
            }
        }
        public void cancel(){
            if(mToast instanceof EToast2){
                ((EToast2) mToast).cancel();
            }else if(mToast instanceof android.widget.Toast){
                ((android.widget.Toast) mToast).cancel();
            }
        }
        //判断该app是否打开了通知
        /**
         * 可以通过NotificationManagerCompat 中的 areNotificationsEnabled()来判断是否开启通知权限。NotificationManagerCompat 在 android.support.v4.app包中,是API 22.1.0 中加入的。而 areNotificationsEnabled()则是在 API 24.1.0之后加入的。
         * areNotificationsEnabled 只对 API 19 及以上版本有效,低于API 19 会一直返回true
         * */
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @SuppressLint("NewApi")
        private static boolean isNotificationEnabled(Context context){
            if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT){
                NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
                boolean areNotificationsEnabled = notificationManagerCompat.areNotificationsEnabled();
                return areNotificationsEnabled;
            }
            AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
            ApplicationInfo appInfo = context.getApplicationInfo();
    
            String pkg = context.getApplicationContext().getPackageName();
    
            int uid = appInfo.uid;
    
            Class appOpsClass = null; //* Context.APP_OPS_MANAGER *//*
    
            try {
                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(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }
    }

    新建EToast2.java文件:

    package com.php.utils.ui.toast;
    
    import android.content.Context;
    import android.graphics.PixelFormat;
    import android.os.Handler;
    import android.os.Message;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    import com.php.notification.R;
    
    
    
    public class EToast2 {
    
        private WindowManager manger;
        private Long time = 2000L;
        private View contentView;
        private WindowManager.LayoutParams params;
        private static Timer timer;
        private Toast toast;
        private static Toast oldToast;
        private static Context context;
        public static final int LENGTH_SHORT = 0;
        public static final int LENGTH_LONG = 1;
        private static Handler handler;
        private CharSequence text;
    
        private View toastRoot;
    
        private EToast2(Context context, CharSequence text, int HIDE_DELAY){
            this.text = text;
    
            if(HIDE_DELAY == EToast2.LENGTH_SHORT)
                this.time = 2000L;
            else if(HIDE_DELAY == EToast2.LENGTH_LONG)
                this.time = 3500L;
    
            if(oldToast != null && EToast2.context != null && EToast2.context != context){
                EToast2.context = context;
                oldToast.cancel();
                oldToast = null;
            }
            if(oldToast == null){
                LayoutInflater inflate = (LayoutInflater)
                        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                toastRoot = inflate.inflate(R.layout.toast, null);
                TextView tv = (TextView) toastRoot.findViewById(R.id.toast_notice);
                tv.setText(text);
                toast = Toast.makeText(context,"",HIDE_DELAY);
                toast.setView(toastRoot);
                toast.setGravity(Gravity.BOTTOM, 0, 200);
                contentView = toastRoot;
    
                params = new WindowManager.LayoutParams();
                params.height = WindowManager.LayoutParams.WRAP_CONTENT;
                params.width = WindowManager.LayoutParams.WRAP_CONTENT;
                params.format = PixelFormat.TRANSLUCENT;
                params.windowAnimations = context.getResources().getIdentifier("android:style/Animation.Toast", null, null);
                params.type = WindowManager.LayoutParams.TYPE_TOAST;
                params.setTitle("EToast2");
                params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
                params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
                params.y = 200;
            }
            if(handler == null){
                handler = new Handler(){
                    @Override
                    public void handleMessage(Message msg) {
                        EToast2.this.cancel();
                    }
                };
            }
        }
    
        public static EToast2 makeText(Context context, String text, int HIDE_DELAY){
            EToast2 toast = new EToast2(context, text, HIDE_DELAY);
            return toast;
        }
    
        public static EToast2 makeText(Context context, int resId, int HIDE_DELAY) {
            return makeText(context,context.getText(resId).toString(),HIDE_DELAY);
        }
    
        public void show(){
            if(oldToast == null){
                oldToast = toast;
                Context context = contentView.getContext().getApplicationContext();
                if (context == null) {
                    context = contentView.getContext();
                }
                manger = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
                manger.addView(contentView, params);
            }else{
                if(timer != null){
                    timer.cancel();
                }
                ((TextView)(oldToast).getView().findViewById(R.id.toast_notice)).setText(text);
            }
            timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(1);
                }
            }, time);
        }
    
    
        public void cancel(){
            try {
                manger.removeView(contentView);
            } catch (IllegalArgumentException e) {
                //这边由于上下文被销毁后removeView可能会抛出IllegalArgumentException
                //暂时这么处理,因为EToast2是轻量级的,不想和Context上下文的生命周期绑定在一块儿
                //其实如果真的想这么做,可以参考博文2的第一种实现方式,添加一个空的fragment来做生命周期绑定
            }
            timer.cancel();
            oldToast.cancel();
            timer = null;
            toast = null;
            oldToast = null;
            contentView = null;
            handler = null;
        }
    }

    toast.xml文件:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"  
        android:background="@drawable/toast_bg">  
        
        <TextView android:id="@+id/toast_notice"  
              android:layout_width="wrap_content"  
              android:layout_height="wrap_content"  
              android:layout_gravity="center_vertical"  
              android:gravity="center_vertical"  
              android:background="@color/transparent"
              android:textSize="18sp"
              android:padding="7dp"
              android:textColor="@color/white">  
        </TextView>  
    </LinearLayout>

    使用方法:

    /**
    	 * 提示窗
    	 *
    	 * @param context
    	 * @param mes
    	 */
    	public static void promptMes(Context context, String mes) {
    		com.php.utils.ui.toast.Toast.makeText(context, mes,
    				Toast.LENGTH_SHORT).show();
    	}

    欢迎大家关注本人公众号,一起学习进步,谢谢!

    公众号

    展开全文
  • 设置通知管理

    千次阅读 2017-12-25 13:48:20
    设置通知管理在点击一个按钮后,判断该手机的通知栏是否打开(大部分的手机是默认打开的,但是像oppo是默认关闭的),如果通知栏是关闭的,那么收到通知后,手机的通知栏是收不到消息提示的。用下面的方法判断通知栏...

    设置通知管理

    在点击一个按钮后,判断该手机的通知栏是否打开(大部分的手机是默认打开的,但是像oppo是默认关闭的),如果通知栏是关闭的,那么收到通知后,手机的通知栏是收不到消息提示的。

    用下面的方法判断通知栏是否打开

    public class NotificationsUtils {
        private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
        private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
    
        @SuppressLint("NewApi")
        public static boolean isNotificationEnabled(Context context) {
    
            AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
            ApplicationInfo appInfo = context.getApplicationInfo();
            String pkg = context.getApplicationContext().getPackageName();
            int uid = appInfo.uid;
    
            Class appOpsClass = null;
          /* Context.APP_OPS_MANAGER */
            try {
                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 = (Integer) opPostNotificationValue.get(Integer.class);
                return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return false;
        }
    
    }
    

    如果没有打开,可以用下面的方法进入设置页去设置状态栏

     private void setting() {
            Intent localIntent = new Intent();
            localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            if (Build.VERSION.SDK_INT >= 9) {
                localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
                localIntent.setData(Uri.fromParts("package", getPackageName(), null));
            } else if (Build.VERSION.SDK_INT <= 8) {
                localIntent.setAction(Intent.ACTION_VIEW);
                localIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails");
                localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
            }
            startActivity(localIntent);
        }

    Github地址

    展开全文
  • 拿了个安卓手机,设置-通知-关闭允许使用通知圆点,微信右上角不再有小圆点了,但是电话短信仍然有,这是为什么,是要app内部实现什么权限吗
  • 小米MIUI关闭内容中心通知

    千次阅读 2020-07-02 10:18:16
    被MIUI的内容中心打扰了许久,终于找到彻底关闭它的方式。 这个内容中心,在应用列表...第三步:点击设置按钮进入程序管理界面,关闭 允许通知 第四步:进入设置--桌面--关闭下滑进入内容中心 ...

    被MIUI的内容中心打扰了许久,终于找到彻底关闭它的方式。

    这个内容中心,在应用列表里找不到卸载,在通知管理里也找不到,小米把它藏得深。

    关闭内容中心通知

    第一步,先进入内容中心,然后切换到后台,然后在多任务窗口操作

     

    第2步:长按内容中心这个任务

    第三步:点击设置按钮进入程序管理界面,关闭   允许通知

     

    第四步:进入设置--桌面--关闭下滑进入内容中心

     

     

     

     

    展开全文
  • UAC关闭设置

    千次阅读 2017-09-03 22:06:35
    UAC(User Account Control,用户账户控制),是windows Visa(及微软高版本操作系统)中的一组新的基础结构技术,可以帮助阻止恶意程序损坏系统。...3、进入【用户账户控制设置】将通知设置成【从不通知】就可以了!

    UAC(User Account Control,用户账户控制),是windows Visa(及微软高版本操作系统)中的一组新的基础结构技术,可以帮助阻止恶意程序损坏系统。但这往往给开发环境带来不便。下面小编来教大家怎么去关闭吧。

    1、 win+r打开【运行】窗口
    这里写图片描述

    2、进入【系统配置】窗口选中【UAC设置】然后点击【启动】
    这里写图片描述

    3、进入【用户账户控制设置】将通知设置成【从不通知】就可以了!
    这里写图片描述

    展开全文
  • 关闭小米系统自动更新通知

    千次阅读 2018-12-27 10:54:14
    设置--应用管理--更多应用--搜索“系统更新”--点进去选“通知管理”--关闭所有开关即可。
  • win10关闭最佳分辨率通知

    万次阅读 2018-05-06 16:46:36
    所以就查了一下如何关闭通知 然而百度上的方法不尽人意 于是我追踪这个消息的来源,来自于英特热核心显卡管理软件(怪不得百度上的方法不行) 于是我从任务栏右边进入英特尔核心显卡设置软件,进入它的控制面板 ...
  • Windows 10怎么彻底关闭消息通知

    千次阅读 2017-08-15 11:43:00
    可能很多Win10用户都知道,可以在“设置-系统-通知和操作”中将各种通知选项关闭掉,但是该方法不够彻底,对于一些系统安全方面的通知并不奏效,该来的通知照样来,还是会影响大家手头的工作。下面小编将给大家分享...
  • 1、获取用户通知中心对程序消息通知设置,是否开启消息通知if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0f) { UIUserNotificationSettings *setting = [[UIApplication sharedApplication] ...
  • 8.0以上,9.0 Notification设置通知栏振动和声音没有效果 不管怎么修改 NotificationChannel 属性都没有效果,直到想到,主动让手机去振动下,发出一个通知声音,问题解决。附上代码。。 /** * 播放通知声音 */ ...
  • 最近项目中在完善推送功能,需要进入APP时检测一下是否开启了推送权限,如果没有开启弹窗提醒,当用户点击弹窗时直接跳转到APP的通知设置界面,就像下面这种: 二、需求实现 1、检测是否开启通知权限 接到需求时一...
  • IOS10系统 app没有出现在系统设置-通知列表处理 app 有推送功能,安装后却没有出现在 系统设置-通知列表 处理 App推送收不到,使用 [[UIApplication ...IOS10 系统关闭通知后再开启,开启成功却收不到推送处理
  • 那么如何设置通知中心的消息来源呢,小编在这里给大家讲一讲: 第一步、点击桌面上右下角的通知中心图标 第二步、在打开的通知中心界面里,点击下方的所有设置的图标 第三步、在打开的系统设置界面里,找到“系统...
  • redmine 邮件通知设置

    千次阅读 2011-04-12 12:32:00
    以gmail为例,参考如下链接: http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/<br />  1....  delivery_method: :smtp  smtp_settings: ...
  • 可以得知type的值,根据type的值可以判断出用户在通知设置中是如何设置的。 比如:type = 3,那么用户打开的是 UIRemoteNotificationTypeBadge和 UIRemoteNotificationTypeSound;  type = 6,那么用户打开...
  • jira设置邮件通知完整流程

    千次阅读 2020-03-05 10:30:10
    邮箱准备: ...3、选择编辑或者新建一条邮件通知 我这里使用的是qq邮箱,所以主机名是smtp.qq.com,如果是163邮箱则为smtp.163.com,其他邮箱则做响应修改。若是初次修改,记得勾选更改密码,并在...
  • 3 如果用户设置不提醒,则永不提醒 实现: 1 关于本地通知移步这里 2 实现代码 static NSNotificationName const _Nullable kCheckinNotification = @"CheckinNotification"; static NSSt...
  • 1、获取用户通知中心对程序消息通知设置,是否开启消息通知 if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0f) { UIUserNotificationSettings *setting = [[UIApplication sharedApplication] ...
  • 关闭常驻通知:左上角主界面----软件设置----通知栏图标,关闭。 希望可以帮到您!微笑为您解答,如果有什么问题还可以继续咨询哦!O(∩_∩)O 追问 这个方法应该是旧版本app的方法吧?我现在使用的是...
  • oppo 通知栏权限关闭官方解释

    千次阅读 2019-09-20 13:42:35
    15、我集成了OPPOPUSH,为什么通知栏权限是关闭的? 目前通知栏权限默认关闭,需要用户手动开启, 建议在APP内做弹框提示,引导用户手动开启应用通知权限。 问题:我发现部分app 比如抖音 西瓜视频 喜马拉雅 应用...
  • Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转 一、Notification通知与基本用法 通知Notification是Android系统中比较有特色的一个功能,当某个应用程序希望用户发出一些提示...
  • - (void)viewDidAppear:(BOOL)animated { //首先判断应用通知是否授权,注意iOS10.0之后方法不一样 if (@available(iOS 10.0, *)) { [[UNUserNotificationCenter currentNotificationCenter] ...
  • WIN10 EDGE浏览器通知关闭

    千次阅读 2017-09-17 21:04:26
    WIN10 EDGE浏览器通知关闭
  • 前言既然能看到这篇博文,就说明你一定看过这个【Android】当关闭通知消息权限后无法显示系统Toast的解决方案 。然后,我很开心的告诉你,兄弟,可能你们的心病这次就解决了~当然,没看过上一篇博文的还是建议看下,...
  • NotificationChannel channel = new NotificationChannel("1","name", NotificationManager.IMPORTANCE_HIGH);... 以上代码创建的通知没有提示音,需要手动打开。有没有什么方法让创建的通知默认有提示音。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 260,166
精华内容 104,066
关键字:

如何关闭设置通知