精华内容
下载资源
问答
  • 0. 消息通知栏-禁止应用的消息通知 1. 底层源码 frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java package com.android.server.notification; /** {@hide} *...

    0. 消息通知栏-禁止应用的消息通知

    在这里插入图片描述

    1. 底层源码

    frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java

    package com.android.server.notification;
    
    /** {@hide} */
    public class NotificationManagerService extends SystemService {
    
            // 这里需要系统应用才有对应权限,即配置 android:sharedUserId="android.uid.system"
            @Override
            public void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled) {
                checkCallerIsSystem();
    
                setNotificationsEnabledForPackageImpl(pkg, uid, enabled);
                mRankingHelper.setEnabled(pkg, uid, enabled);
                savePolicyFile();
            }
    
            /**
             * Use this when you just want to know if notifications are OK for this package.
             */
            @Override
            public boolean areNotificationsEnabled(String pkg) {
                return areNotificationsEnabledForPackage(pkg, Binder.getCallingUid());
            }
    

    2. 接口实现

    2.1 工具类

    import android.app.INotificationManager;
    import android.app.Notification;
    import android.content.Context;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    import android.util.Log;
    import android.os.ServiceManager;
    
    public class NotificationBackend {
    
        private static final int ERROR_UID = -1;
        private static final String TAG = "NotificationBackend";
    
        public static void setNotificationsBanned(Context mContext, String pkg, boolean enabled) {
            int uid = getUid(mContext, pkg);
            if (uid == ERROR_UID) {
                return ;
            }
    
            INotificationManager sINM = INotificationManager.Stub.asInterface(ServiceManager.getService(Context.NOTIFICATION_SERVICE));
    
            try {
                sINM.setNotificationsEnabledForPackage(pkg, uid, enabled);
                Log.d(TAG, "setNotificationsEnabledForPackage pkg = " + pkg + ", enabled = " + enabled);
            } catch (Exception e) {
                Log.w(TAG, "Error calling NoMan", e);
            }
        }
    
        public static boolean isNotificationsAllow(Context mContext, String pkg) {
            int uid = getUid(mContext, pkg);
            if (uid == ERROR_UID) {
                return false;
            }
    
            INotificationManager sINM = INotificationManager.Stub.asInterface(ServiceManager.getService(Context.NOTIFICATION_SERVICE));
    
            try {
                final boolean enabled = sINM.areNotificationsEnabledForPackage(pkg, getUid(mContext, pkg));
                Log.d(TAG, "isNotificationsBanned pkg = " + pkg + ", enabled = " + enabled);
                return enabled;
            } catch (Exception e) {
                Log.w(TAG, "Error calling NoMan", e);
                return false;
            }
        }
    
        public static int getUid(Context mContext, String pkg) {
            int uid = -1;
            try {
                PackageManager pm = mContext.getPackageManager();
                ApplicationInfo ai = pm.getApplicationInfo(pkg, PackageManager.GET_ACTIVITIES);
                uid = ai.uid;
                Log.d(TAG, "getUid = " + ai.uid);
            } catch (NameNotFoundException e) {
                e.printStackTrace();
            }
    
            return uid;
        }
    }
    
    
    

    2.2 AndroidManifest.xml 配置

    android:sharedUserId="android.uid.system"
    
    展开全文
  • 钉钉消息通知

    千次阅读 2019-02-27 15:57:52
    钉钉消息通知 背景:平台中存在例如下订单,在线沟通时,需要及时通知平台运营人员,目前已有短信邮件通知,现期望在钉钉上也通知到。 本文范围:如何在通过钉钉api给指定人/指定群聊/指定部门发送消息通知。 群...

    钉钉消息通知

    • 背景:平台中存在例如下订单,在线沟通时,需要及时通知平台运营人员,目前已有短信邮件通知,现期望在钉钉上也通知到。
    • 本文范围:如何在通过钉钉api给指定人/指定群聊/指定部门发送消息通知。

    群机器人

    群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。
    关键词: 通过机器人在指定群聊里发送组织好的信息。

    群机器人消息类型共分为text类型,markdown类型,link类型,整体跳转ActionCard类型,独立跳转ActionCard类型,FeedCard类型。

    如何开通群机器人?

    1. 首先需创建出一个群聊,所有需要通知的人都在群里。
    2. 群设置里选择机器人管理
      在这里插入图片描述
    3. 添加机器人
      在这里插入图片描述
    4. 选择自定义机器人
      在这里插入图片描述
    5. 填写机器人名称,选择机器人头像
      在这里插入图片描述
    6. 将得到的webhook地址交由研发人员
      在这里插入图片描述

    如何使用机器人发消息?

    向webhook地址发送POST请求,即可发送向群里发送消息。

    text类型

    {
        "msgtype": "text", 
        "text": {
            "content": "我就是我, 是不一样的烟火@156xxxx8827"
        }, 
        "at": {
            "atMobiles": [
                "156xxxx8827", 
                "189xxxx8325"
            ], 
            "isAtAll": false
        }
    }
    
    参数 参数类型 必须 说明
    msgtype String 消息类型,此时固定为:text
    content String 消息内容
    atMobiles Array 被@人的手机号(在content里添加@人的手机号)
    isAtAll bool @所有人时:true,否则为:false

    在这里插入图片描述

    在这里插入图片描述

    markdown类型

    {
         "msgtype": "markdown",
         "markdown": {
             "title":"杭州天气",
             "text": "#### 杭州天气 @156xxxx8827\n" +
                     "> 9度,西北风1级,空气良89,相对温度73%\n\n" +
                     "> ![screenshot](https://gw.alipayobjects.com/zos/skylark-tools/public/files/84111bbeba74743d2771ed4f062d1f25.png)\n"  +
                     "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n"
         },
        "at": {
            "atMobiles": [
                "156xxxx8827", 
                "189xxxx8325"
            ], 
            "isAtAll": false
        }
     }
    
    参数 参数类型 必须 说明
    msgtype String 此消息类型为固定markdown
    title String 首屏会话透出的展示内容
    text String markdown格式的消息
    atMobiles Array 被@人的手机号(在text里添加@人的手机号)
    isAtAll bool @所有人时:true,否则为:false

    在这里插入图片描述

    在这里插入图片描述

    link类型

    {
        "msgtype": "link", 
        "link": {
            "text": "这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林”。
    而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是“红树林”?", 
            "title": "时代的火车向前开", 
            "picUrl": "", 
            "messageUrl": "https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
        }
    }
    
    参数 参数类型 必须 说明
    msgtype String 消息类型,此时固定为:link
    title String 消息标题
    text String 消息内容。如果太长只会部分展示
    messageUrl String 点击消息跳转的URL
    picUrl String 图片URL

    在这里插入图片描述

    整体跳转ActionCard类型

    {
        "actionCard": {
            "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", 
            "text": "![screenshot](serverapi2/@lADOpwk3K80C0M0FoA) 
     ### 乔布斯 20 年前想打造的苹果咖啡厅 
     Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", 
            "hideAvatar": "0", 
            "btnOrientation": "0", 
            "singleTitle" : "阅读全文",
            "singleURL" : "https://www.dingtalk.com/"
        }, 
        "msgtype": "actionCard"
    }
    
    参数 参数类型 必须 说明
    msgtype String 此消息类型为固定actionCard
    title String 首屏会话透出的展示内容
    text String markdown格式的消息
    singleTitle String 单个按钮的方案。(设置此项和singleURL后btns无效)
    singleURL String 点击singleTitle按钮触发的URL
    btnOrientation String 0-按钮竖直排列,1-按钮横向排列
    hideAvatar String 0-正常发消息者头像,1-隐藏发消息者头像

    在这里插入图片描述

    独立跳转ActionCard类型

    {
        "actionCard": {
            "title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", 
            "text": "![screenshot](serverapi2/@lADOpwk3K80C0M0FoA) 
     ### 乔布斯 20 年前想打造的苹果咖啡厅 
     Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", 
            "hideAvatar": "0", 
            "btnOrientation": "0", 
            "btns": [
                {
                    "title": "内容不错", 
                    "actionURL": "https://www.dingtalk.com/"
                }, 
                {
                    "title": "不感兴趣", 
                    "actionURL": "https://www.dingtalk.com/"
                }
            ]
        }, 
        "msgtype": "actionCard"
    }
    
    参数 参数类型 必须 说明
    msgtype String 此消息类型为固定actionCard
    title String 首屏会话透出的展示内容
    text String markdown格式的消息
    btns Array 按钮的信息:title-按钮方案,actionURL-点击按钮触发的URL
    btnOrientation String 0-按钮竖直排列,1-按钮横向排列
    hideAvatar String 0-正常发消息者头像,1-隐藏发消息者头像

    在这里插入图片描述

    FeedCard类型

    {
        "feedCard": {
            "links": [
                {
                    "title": "时代的火车向前开", 
                    "messageURL": "https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI", 
                    "picURL": "https://www.dingtalk.com/"
                },
                {
                    "title": "时代的火车向前开2", 
                    "messageURL": "https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI", 
                    "picURL": "https://www.dingtalk.com/"
                }
            ]
        }, 
        "msgtype": "feedCard"
    }
    
    
    参数 参数类型 必须 说明
    msgtype String 此消息类型为固定feedCard
    title String 单条信息文本
    messageURL String 点击单条信息到跳转链接
    picURL String 单条信息后面图片的URL

    在这里插入图片描述

    工作通知消息

    在这里插入图片描述

    在这里插入图片描述

    发送群消息

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 效果图 目录结构 Notice.vue <template> <transition name="notice-fade"> <div v-if="visible" :class="wrapClasses"> <span class="content">...i v-if="type === 'succe...

    博客地址:http://www.globm.top/blog/1/detail/26
    效果图
    notice目录结构
    project
    Notice.vue

    <template>
      <transition name="notice-fade">
        <div v-if="visible" :class="wrapClasses">
          <span class="content">
            <i v-if="type === 'success'" class="el-icon-success"></i>
            <i v-if="type === 'warning'" class="el-icon-warning"></i>
            <i v-if="type === 'error'" class="el-icon-error"></i>
            <i v-if="type === 'info'" class="el-icon-info"></i>
            <span :class="[prefixCls+'-content']">
              {{msg}}
            </span>
          </span>
        </div>
      </transition>
    </template>
    
    <script>
    const prefixCls = 'notice'
    export default {
      name: 'Notice',
      data () {
        return {
          visible: false,
          type: 'info',
          msg: '',
          duration: 1500,
          prefixCls: prefixCls
        }
      },
      computed: {
        wrapClasses () {
          return [`${prefixCls}`, `${prefixCls}-${this.type}`]
        }
      },
      mounted () {
        this.setTimer()
      },
      methods: {
        setTimer () {
          setTimeout(() => {
            this.close() // 3000ms之后调用关闭方法
          }, this.duration)
        },
        close () {
          this.visible = false
          setTimeout(() => {
            this.$destroy()
            this.$el.parentNode.removeChild(this.$el) // 从DOM里将这个组件移除
          }, 500)
        }
      }
    }
    </script>
    
    <style lang="less" scoped>
      .notice-fade-enter-active,
      .notice-fade-leave-active {
        transition: all 0.3s ease;
      }
      .notice-fade-enter, .notice-fade-leave-to {
        transform: translateY(-20px);
        opacity: 0;
      }
      .notice {
        background-color: transparent!important;
        margin-bottom: 15px;
        .content{
          background-color: #fff;
          border-radius: 5px;
          box-shadow: 0 0 10px rgba(34, 34, 34, 0.2);
          padding: 5px 8px;
          display: inline-block;
          width: auto;
          i{
            margin-right: 3px;
          }
        }
      }
      .notice-success {
        background-color: #fff;
        color: #67C23A;
      }
      .notice-info {
        color: #909399;
        background-color: #fff;
      }
      .notice-warning {
        color: #E6A23C;
        background-color: #fff;
      }
      .notice-error {
        background-color: #fff;
        color: #F56C6C;
      }
      .notice-content {
        font-size: 14px;
      }
    </style>
    
    

    index.js

    import Vue from 'vue'
    import NoticeTpl from './Notice.vue'
    const NoticeConstructor = Vue.extend(NoticeTpl)
    
    let nId = 1
    //在body下新建的标签类名
    let tagClass = 'dialog-notice'
    
    const Message = options => {
      if (JSON.stringify(options) === undefined) { return false }
      let id = 'notice-' + nId++
      options = options || {}
      if (typeof options === 'string') {
        options = {
          msg: options
        }
      }
      const NoticeInstance = new NoticeConstructor({
        data: options
      })
      NoticeInstance.id = id
      NoticeInstance.vm = NoticeInstance.$mount()
      NoticeInstance.vm.visible = true
      NoticeInstance.dom = NoticeInstance.vm.$el
      if (!document.querySelector(`body > .${tagClass}`)) {
        let div = document.createElement('div')
        div.classList.add(tagClass)
        document.body.appendChild(div)
        document.querySelector(`body > .${tagClass}`).appendChild(NoticeInstance.dom)
      }
      document.querySelector(`body > .${tagClass}`).appendChild(NoticeInstance.dom)
      // NoticeInstance.dom.style.zIndex = nId + 1001
      return NoticeInstance.vm
    }
    ['success', 'warning', 'info', 'error'].forEach(type => {
      Message[type] = options => {
        if (typeof options === 'string') {
          options = {
            message: options
          }
        }
        options.type = type
        return Message(options)
      }
    })
    
    export default {
      install (Vue, options = {}) {
        Vue.prototype.$notice = Message
      }
    }
    
    

    全局css文件

    .dialog-notice{
        position: fixed;
        top: 85px;
        display: inline-block;
        max-width: 300px;
        left: 0;
        right: 0;
        margin: 0 auto 10px auto;
        background-color: transparent!important;
        text-align: center;
        z-index: 9999;
    }
    

    main.js中注册使用

    import Notice from './common/notice/index.js'
    
    Vue.use(Notice)
    

    使用

    this.prototype.$notice.success({
      msg: '代码复制成功'
    })
    
    展开全文
  • Notification消息通知(消息合并且显示条数,自定义消息通知内容布局)

    没找到原创作者,所以也不知道来自何处,只有等以后知道原创作者后再补上来源网址!!!

    具体操作:自定义消息通知内容布局;点击界面中心的“点击发送消息”TextView控件,模拟发送通知消息,通知栏接收消息,点击几次则发送几次,点击通知栏消息,跳转到详情界面。

    1.activity_main.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/tv_show"
            android:text="点击发送消息"
            android:textSize="24sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    
    </LinearLayout>
    

    2.layout_item.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@mipmap/ic_launcher" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="18dp"
            android:layout_toRightOf="@+id/imageView1"
            android:text="TextView" />
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="15dp"
            android:text="TextView" />
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView1"
            android:layout_marginLeft="54dp"
            android:layout_toRightOf="@+id/textView2"
            android:text="TextView" />
    
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/textView1"
            android:text="TextView" />
    
    </RelativeLayout>
    

    3.activity_detail.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
    
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/name"
            android:textSize="18sp"
            android:layout_gravity="center_horizontal"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/price"
            android:textSize="18sp"
            android:layout_gravity="center_horizontal"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/detail"
            android:textSize="18sp"
            android:layout_gravity="center_horizontal"/>
    </LinearLayout>

    4.SingletonF类:

    /**
     * 用于存储消息数目
     * Created by admin on 2017/9/4.
     */
    
    public class SingletonF{
    
        private  int info_number=0;
    
        private static class SingletonHolder {
            /**
             * 单例对象实例
             */
           static final SingletonF INSTANCE = new SingletonF();
        }
    
        public static SingletonF getInstance() {
            return SingletonHolder.INSTANCE;
        }
    
        /**
        * private的构造函数用于避免外界直接使用new来实例化对象
        */
        private SingletonF() {}
    
        public  int getInfo_number() {
            return info_number;
        }
    
        public  void setInfo_number(int info_number) {
            this.info_number = info_number;
        }
    
    //    /**
    //     * 若SingletonF implements Serializable则必须实现readResolve方法
    //     * readResolve方法应对单例对象被序列化时候
    //     */
    //    private Object readResolve() {
    //        return getInstance();
    //    }
    
    }
    

    5.MyBroadcastReceiver类:

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v4.app.NotificationCompat;
    import android.util.Log;
    import android.widget.RemoteViews;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
    
        private SingletonF singletonF;
        private Context context1;
    
        @Override
        public void onReceive(Context context, Intent intent) {
            this.context1 = context;
    //      if (intent.getStringExtra("info").equals("广播发送了")) {
    //          Log.i("静态广播:", "广播我已经接受了");
    //      }
            Message message = handler.obtainMessage();
            message.what = 0;
            handler.sendMessage(message);
        }
    
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case 0:
                        singletonF = SingletonF.getInstance();
                        int first = singletonF.getInfo_number();
                        first++;
                        Date nowTime = new Date(System.currentTimeMillis());
                        SimpleDateFormat sdFormatter = new SimpleDateFormat("HH:mm");
                        String retStrFormatNowDate = sdFormatter.format(nowTime);
                        singletonF.setInfo_number( first);
    
                        RemoteViews contentViews = new RemoteViews(context1.getPackageName(), R.layout.layout_item);
                        // 通过控件的Id设置属性
                        contentViews.setImageViewResource(R.id.imageView1, R.mipmap.ic_launcher_round);
                        contentViews.setTextViewText(R.id.textView1, "消息标题");
                        contentViews.setTextViewText(R.id.textView2, "消息内容");
                        contentViews.setTextViewText(R.id.textView3, " (" + first + "条新消息)");
                        contentViews.setTextViewText(R.id.textView4, "" + retStrFormatNowDate);
                        // 点击通知栏跳转的activity
                        Intent intent = new Intent(context1, ActDetail.class);
                        PendingIntent pendingIntent = PendingIntent.getActivity(context1, 0, intent,
                                PendingIntent.FLAG_CANCEL_CURRENT);
    
                        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context1)
                                .setSmallIcon(R.mipmap.ic_launcher_round).setTicker("new message");
                        // 自动管理通知栏消息
                        mBuilder.setAutoCancel(true);
                        mBuilder.setContentIntent(pendingIntent);
                        /// 自定义布局
                        mBuilder.setContent(contentViews);
                        // 使用默认提示音
                        mBuilder.setDefaults(Notification.DEFAULT_ALL);
                        NotificationManager mNotificationManager = (NotificationManager) context1
                                .getSystemService(context1.NOTIFICATION_SERVICE);
                        // notify(int id, Notification notification)若id为同一个值,则通知栏只会显示一行,并不停更新此消息内容
                        // 若为类似UUID.randomUUID().hashCode()这样不同的唯一标识符,则有几条消息通知栏就显示几行
                        mNotificationManager.notify(1, mBuilder.build());
    
                        break;
                    default:
                        break;
                }
            }
        };
    
    }

    6.MainActivity类:

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        private TextView tv_show;
        private int btn_number = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tv_show = (TextView) this.findViewById( R.id.tv_show);
            tv_show.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showNotify();
                    btn_number++;
                    tv_show.setText("发送了" + btn_number + "次广播");
                }
            });
        }
    
        private void showNotify() {
            Intent intent = new Intent();
            intent.setAction("MASSAGE_NOTIFICATION");
    //        intent.putExtra("info", "广播发送了");
            sendBroadcast(intent);
        }
    
        @Override
        protected void onStop() {
            btn_number = 0;
            tv_show.setText("发送了" + btn_number + "次广播");
            super.onStop();
        }
    
        @Override
        protected void onPause() {
            btn_number = 0;
            tv_show.setText("发送了" + btn_number + "次广播");
            super.onPause();
        }
    
        @Override
        protected void onDestroy() {
            btn_number = 0;
            super.onDestroy();
        }
    
    }
    

    7.ActDetail类:

    import android.app.NotificationManager;
    import android.content.Context;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    
    /**
     * Created by admin on 2017/9/4.
     */
    
    public class ActDetail extends AppCompatActivity{
    
        NotificationManager notificationManager;
        SingletonF singletonF;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_detail);
    
            singletonF = SingletonF.getInstance();
            notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.cancel(1);
            singletonF.setInfo_number(0);
        }
    }
    
    展开全文
  • laravel 消息通知实现

    2020-06-10 13:43:14
    PS:本次主要记录一下laravel 自带的消息通知Notification的实现 1.生成数据库,可以使用迁移 在项目目录下的cmd中运行 artisan命令 php artisan notifications:table php artisan migrate 在user表里增加一个...
  • DingTalk钉钉消息通知

    2020-08-19 17:00:29
    钉钉消息通知简单分为单纯的消息通知(没有回复) 和 会话。 1、自定义机器人开发通知不需要sdk包。 <?php function request_by_curl($remote_server, $post_string) { $ch = curl_init(); curl_...
  • Android之消息通知

    万次阅读 2017-01-20 11:01:51
    Android之开发消息通知
  • 前端做消息通知

    千次阅读 2019-09-10 14:57:57
    1、消息通知,原生一些用webScoket 2、收费的,可以使用goeasy,http://www.goeasy.io/cn/doc/event/event.html 查看文档,事件与监听器即可
  • 浏览器如何开启消息通知

    千次阅读 2020-05-31 08:52:42
    谷歌/火狐/搜狗/UC/QQ 如何开启消息通知介绍。 chrome 谷歌浏览器 右上角 ——> 设置 ——> 找到 "网站设置" ——> "通知" ——> "添加" 把需要显示消息通知的网址添加进去即可。 Firefox ...
  • Laravel消息通知系统之数据库

    千次阅读 2020-04-11 12:02:56
    Laravel 自带了一套极具扩展性的消息通知系统,尤其还支持多种通知频道,我们将利用此套系统来向用户发送消息提醒。 通知频道指通知的各种途径,Laravel自带的有如下几种 数据库 邮件 短信(通过 Nexmo) Slack ...
  • 通过RabbitMQ 进行消息通知

    千次阅读 2020-03-20 13:46:52
    通过RabbitMQ 进行消息通知 /// <summary> /// 通过RabbitMQ 进行消息通知 /// </summary> /// <param name="MQCode">消息队列的名称</param> /// <param name="MQmessage">...
  • 消息通知系统模型设计

    千次阅读 2019-02-21 00:42:29
    本篇主要明确消息通知系统的概念和具体实现,包括数据库设计、技术方案、逻辑关系分析等。消息通知系统是一个比较复杂的系统,这里主要分析站内消息如何设计和实现。 我们常见的消息推送渠道有以下几种: 设备推送 ...
  • Laravel——消息通知

    2018-05-26 13:08:35
    有的时候,在做一些业务的时候,可能会遇到这么个需求。...Laravel其实内部就自带消息通知的。接下来就看看是怎么使用的。 创建消息notifications表,并且给用户增添字段notification_count 消息表,毋庸置疑是...
  • java对接钉钉发送消息通知

    千次阅读 2020-11-24 10:14:45
    现在,许多的消息会议,工作任务安排都不在是通过邮件呀,或者是使用口头表达的形式了,都是一些通讯软件进行分发,在工作中,也会有一些东西需要通过程序进行自动发送一些消息通知到指定的人,告诉他,你的,干活的...
  • 企业微信实现消息通知功能

    千次阅读 2020-07-15 14:44:57
    一:获取消息通知所需参数:appid,secret,agentid 登录企业微信:https://work.weixin.qq.com/ 企业微信消息通知文档:https://work.weixin.qq.com/api/doc/90000/90135/90236 获取appid,secret,agentid方式可以...
  • websocket 推送消息通知

    2017-11-10 06:06:03
    就比如我要发帖 点发帖会提示我有一个未结的帖子消息通知,使用websocket怎么做的哦? websocket服务端怎么查询数据库?项目用的struts
  • 1.顶部通知栏的消息通知 Intent intent = new Intent(mContext, 跳转到哪个Activity.class); //点击了之后进入的一个Actity PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, ...
  • Redis消息通知

    万次阅读 2014-12-23 09:27:46
    消息通知 任务队列 使用任务队列的好处 松耦合。生产者和消费者无需知道彼此的实现细节,只需要约定好任务的描述格式。这使得生产者和消费者可以由不同的团队使用不同的编程语言编写易于扩展。消费者可以有多个...
  • Android 打开消息通知权限

    万次阅读 2018-11-05 14:35:14
    转载自https://blog.csdn.net/rocrocflying/article/details/78333256?locationNum=8&amp;fps=1 ... 没有取得作者授权,如有不便,请联系我删除。 很多人或系统会关闭消息通知权限来组织手机天天就...
  • Android Wear 之 消息通知

    千次阅读 2017-03-28 15:39:03
    AndroidWear上的消息通知
  • android通知栏的消息通知(Notification)

    千次阅读 2017-03-19 10:44:56
    转载请注明出处:http://blog.csdn.net/xiaohao0724/article/details/63682146在...通知栏消息通知的使用步骤一般可以分为以下步骤: 1. 首先需要一个NotificationManager对通知进行管理 2. 为了兼容低版本使用v4包
  • 1.小程序的订阅消息的每一次推送都需要获取授权 2.小程序的订阅消息每次都...5.获取了一次授权允许一个订阅消息通知,用完即授权失效,若继续推送则出现“"errcode":43101,"errmsg":"userrefusetoacceptthemsg” ...
  • Redis消息通知系统的实现

    千次阅读 2018-11-10 00:18:38
    Redis消息通知系统的实现
  • QT托盘消息模拟QQ消息通知

    千次阅读 2014-03-27 23:38:43
    使用QQ时,当有消息过来时,托盘的图标一闪一闪的,鼠标悬浮时出现消息通知列表,显示名字和数量,Qt有自带的消息托盘,那没有鼠标悬浮事件,这里通知定时器查找鼠标的坐标,在托盘范围内时显示消息列表,离开托盘...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,529
精华内容 11,811
关键字:

消息通知