精华内容
下载资源
问答
  • Android发送通知

    千次阅读 2018-01-02 00:00:16
    通知介绍Android通知是一个基本的...NotificationManager是通知的管理类,负责发送通知和清除通知操作。通知标志Flags通过该标志位,可以设置通知的提醒标志,可以向通知添加声音、闪灯和振动效果,可以多个属性进行组

    通知介绍

    Android通知是一个基本的操作,状态通知栏主要涉及到2个类: Notification 和 NotificationManager。

    Notification为通知信息类,可以设置通知栏的各种属性。

    NotificationManager是通知的管理类,负责发送通知和清除通知操作。

    通知标志Flags

    通过该标志位,可以设置通知的提醒标志,可以向通知添加声音、闪灯和振动效果,可以多个属性进行组合。

    • Notification.FLAG_SHOW_LIGHTS //三色灯提醒,在使用三色灯提醒时候必须加该标志符

    • Notification.FLAG_ONGOING_EVENT //发起正在运行事件(活动中)

    • Notification.FLAG_INSISTENT //让声音、振动无限循环,直到用户响应 (取消或者打开)

    • Notification.FLAG_ONLY_ALERT_ONCE //发起Notification后,铃声和震动均只执行一次

    • Notification.FLAG_AUTO_CANCEL //用户单击通知后自动消失

    • Notification.FLAG_NO_CLEAR //只有全部清除时,Notification才会清除 ,不清楚该通知(QQ的通知无法清除,就是用的这个)

    • Notification.FLAG_FOREGROUND_SERVICE //表示正在运行的服务

    示例代码

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("测试通知")
                .setContentText("Hello World");
    
        //设置点击通知之后的响应,启动SettingActivity类
        Intent resultIntent = new Intent(this,SettingActivity.class);
    
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,resultIntent,PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(pendingIntent);
    
        Notification notification = builder.build();
        notification.flags = Notification.FLAG_ONGOING_EVENT;
    
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1,notification);
    

    最终效果如下:
    这里写图片描述

    展开全文
  • 短信发送--短信发送流程--应用

    千次阅读 2012-07-29 11:16:59
    短信发送流程应用层解析 1、涉及的类 com.android.mms.ui.ComposeMessageActivity com.android.mms.data.WorkingMessage com.android.mms.transaction.MessageSender ...
    短信发送流程应用层解析

    1、涉及的类

    com.android.mms.ui.ComposeMessageActivity
    com.android.mms.data.WorkingMessage
    com.android.mms.transaction.MessageSender
    com.android.mms.transaction.SmsMessageSender
    com.android.mms.transaction.SmsSingleRecipientSender
    com.android.mms.transaction.SmsReceiverService
    com.android.mms.transaction.SmsReceiver
    2、时序图
    说明:从ui界面开始,到调用中间层SmsManger的方法发送短信,大致时序就是这样,参考代码是android 2.3

    3、流程解析

    3.1 ComposeMessageActivity工作

    该类是我们编辑短信的UI,与用户交互,如下图所示


    当用户编辑完成,即可点击发送的按钮,将短信内容发送出去,点击sendbutton就会触发该button对应的监听器,由于ComposeMessageActivity实现了OnClickListener接口,所以最终调用到了onclick方法里。

    1)onClick分析

       该方法做了两件件事情:

        一是调用isPreparedForSending方法判断当前短信是否准备发送,依据就是短信短信的接收者是否超过允许的上限,是否有接收者,以及短信是否有内容或者附件、主题之类的,不允许用户发送一条什么都没有的短信出去。

       二是,上面的检查通过调用confirmSendMessageIfNeeded方法开始发送流程。当然并不是调用了该方法就一定能发送成功,该方法同样会做一系列的检查,直到符合要求了才会放行。

    2)confirmSendMessageIfNeeded分析 

    该方法的逻辑调用如下图所示:

    3)sendMessage方法分析
    上图可以看出最后都要走到sendMessage来,我们来看看这个方法到底做了哪些工作。
    通过查看代码我们可以发现最最核心的工作就是: 把发送短信的工作交给WorkingMessage,mWorkingMessage.send(mDebugRecipients);其他的工作也仅仅是做一些辅助型的操作。
    小结:到此为止发送短信的工作交给了WorkingMessage,那ComposeMessageActivity主要的工作即是对双卡的处理。

    3.2 WorkingMessage简单分析

    1)send()分析
    该方法做了五项工作:
    一是  检查接收者列表时否为空,这里我就不做具体的分析。
    二是将短信内容从8字节转换成7字节;
    三是判断当前是否是发送彩信,我们当前是短信发送,所以可定不会走彩信的发送流程。
    四是,将短信的签名加到短信的内容上。
    五是调用preSendSmsWorker()方法。
    2)preSendSmsWorker分析
    一是重置界面,将界面上的各个组件全部清除
    二是调用sendSmsWorker方法
    三是删除草稿。
    3)sendSmsWorker()所做的工作
    调用SmsMessageSender的sendMessage()方法

    3.3 SmsMessageSender简析

    1)sendMessage()

    该方法会调用queueMessage()方法把处理发送的任务抛出去。

    2)queueMessage()
    它的职责有两个:
    一是将要发送的短息保存到数据库;
          SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
            boolean requestDeliveryReport = prefs.getBoolean(
                    MessagingPreferenceActivity.SMS_DELIVERY_REPORT_MODE,
                    DEFAULT_DELIVERY_REPORT_MODE);
    
            for (int i = 0; i < mNumberOfDests; i++) {
                try {
                    log("updating Database with sub = " + mSubscription);
                    Sms.addMessageToUri(mContext.getContentResolver(),
                            Uri.parse("content://sms/queued"), mDests[i],
                            mMessageText, null, mTimestamp,
                            true /* read */,
                            requestDeliveryReport,
                            mThreadId, mSubscription);
                } catch (SQLiteException e) {
                    SqliteWrapper.checkSQLiteException(mContext, e);
                }
            }
    二是,将任务转交到其他人,只不过它采用的方式是发广播;
         // Notify the SmsReceiverService to send the message out
            Intent intent = new Intent(SmsReceiverService.ACTION_SEND_MESSAGE, null, mContext, SmsReceiver.class);
    		intent.putExtra(SUBSCRIPTION, mSubscription);
            mContext.sendBroadcast(intent);
    小结:该类做了一个很重要的工作就是讲要发送的短信保存进入数据库,然后发广播通知SmsReceiver;

    3.4 SmsReceiver 到 SmsReceiverService 简析

    实际上SmsReceiver这家伙也不是干事的人,它仅仅是拿到手里后马上就转交给SmsReceiverService服务了,“这事不归我管,我就是一个送快递的“,SmsReceiver的角色就是这样的,调用的方法可以参考时序图;

    3.5 SmsReceiverService 简析

    讲了很久终于干活的来了,它既然是一个服务,当然它会走自己的声明周期函数,首先是onCrate,该方法近几年是初始化,然后是onStartCommand(),该方法也没做啥,仅仅是向ServiceHandler发送消息,看来人家做苦力都做出心得了。
    1)ServiceHandler处理发送请求
      @Override
            public void handleMessage(Message msg) {
                int serviceId = msg.arg1;
                Intent intent = (Intent)msg.obj;
                if (intent != null) {
                    String action = intent.getAction();
    
                    int error = intent.getIntExtra("errorCode", 0);
                  if (SMS_RECEIVED_ACTION.equals(action)) {
                        handleSmsReceived(intent, error);
                    } else if (SMS_CB_RECEIVED_ACTION.equals(action)) {
                        handleCbSmsReceived(intent, error);
                    } else if (ACTION_BOOT_COMPLETED.equals(action)) {
                        handleBootCompleted();
                    } else if (TelephonyIntents.ACTION_SERVICE_STATE_CHANGED.equals(action)) {
                        handleServiceStateChanged(intent);
                    } else if (ACTION_SEND_MESSAGE.endsWith(action)) {
                        handleSendMessage(intent);
                    }
                }
                // NOTE: We MUST not call stopSelf() directly, since we need to
                // make sure the wake lock acquired by AlertReceiver is released.
                SmsReceiver.finishStartingService(SmsReceiverService.this, serviceId);
            }
        }
    这里接收到发送后会走handleSendMessage方法;
    2)handleSendMessage()简析:
    1、判断双卡是否都可以使用,如果是获取当前的卡并调用sendFirstQueuedMessage(int sub)
    2、如果双卡不是都可以使用,就直接调用sendFirstQueuedMessage()方法;
    注意:这里是调用的两个不同的方法,看他们的参数你就知道了,但实际上sendFirstQueuedMessage()无参的函数最终还是通过调用sendFirstQueuedMessage(int sub)来实现的;相当于最后还是调用的sendFirstQueuedMessage(int sub)这个方法;
    3)sendFirstQueuedMessage(int sub)简析
      它首先是从数据库中取出短信,然后调用SmsSingleRecipientSender的sendMessage()方法发送;
    小结:大家可以发现走了半天,最后还是没有开始发送。

    3.6  SmsSingleRecipientSender简析

    sendMessage()说明:
    一是对短信的内容进行分割
    二是将短信保存到OUTBOX的数据库表里
    三是将分割的短信分开发送
    四是调用的SMSManger类的sendMultipartTextMessage()发送,将发送的具体操作转移给中间层。
    具体代码如下:
    if (mMessageText == null) {
                // Don't try to send an empty message, and destination should be just
                // one.
                throw new MmsException("Null message body or have multiple destinations.");
            }
            SmsManager smsManager = SmsManager.getDefault();
            ArrayList<String> messages = null;
            if ((MmsConfig.getEmailGateway() != null) &&
                    (Mms.isEmailAddress(mDest) || MessageUtils.isAlias(mDest))) {
                String msgText;
                msgText = mDest + " " + mMessageText;
                mDest = MmsConfig.getEmailGateway();
                messages = smsManager.divideMessage(msgText);
            } else {
               messages = smsManager.divideMessage(mMessageText);
               // remove spaces from destination number (e.g. "801 555 1212" -> "8015551212")
               mDest = mDest.replaceAll(" ", "");
            }
            int messageCount = messages.size();
    
            if (messageCount == 0) {
                // Don't try to send an empty message.
                throw new MmsException("SmsMessageSender.sendMessage: divideMessage returned " +
                        "empty messages. Original message is \"" + mMessageText + "\"");
            }
    
            boolean moved = Sms.moveMessageToFolder(mContext, mUri, Sms.MESSAGE_TYPE_OUTBOX, 0);
            if (!moved) {
                throw new MmsException("SmsMessageSender.sendMessage: couldn't move message " +
                        "to outbox: " + mUri);
            }
    
            ArrayList<PendingIntent> deliveryIntents =  new ArrayList<PendingIntent>(messageCount);
            ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messageCount);
            for (int i = 0; i < messageCount; i++) {
                if (mRequestDeliveryReport) {
                    // TODO: Fix: It should not be necessary to
                    // specify the class in this intent.  Doing that
                    // unnecessarily limits customizability.
                    deliveryIntents.add(PendingIntent.getBroadcast(
                            mContext, 0,
                            new Intent(
                                    MessageStatusReceiver.MESSAGE_STATUS_RECEIVED_ACTION,
                                    mUri,
                                    mContext,
                                    MessageStatusReceiver.class),
                            0));
                }
                Intent intent  = new Intent(SmsReceiverService.MESSAGE_SENT_ACTION,
                        mUri,
                        mContext,
                        SmsReceiver.class);
    
                int requestCode = 0;
                if (i == messageCount -1) {
                    // Changing the requestCode so that a different pending intent
                    // is created for the last fragment with
                    // EXTRA_MESSAGE_SENT_SEND_NEXT set to true.
                    requestCode = 1;
                    intent.putExtra(SmsReceiverService.EXTRA_MESSAGE_SENT_SEND_NEXT, true);
                    intent.putExtra(SUBSCRIPTION, mSubscription);
                }
                sentIntents.add(PendingIntent.getBroadcast(mContext, requestCode, intent, 0));
            }
            try {
                smsManager.sendMultipartTextMessage(mDest, mServiceCenter, messages, sentIntents,
                           deliveryIntents, mSubscription);
            } catch (Exception ex) {
                throw new MmsException("SmsMessageSender.sendMessage: caught " + ex +
                        " from SmsManager.sendTextMessage()");
            }
            if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {
                log("sendMessage: address=" + mDest + ", threadId=" + mThreadId +
                        ", uri=" + mUri + ", msgs.count=" + messageCount);
            }

    4、总结

     这部分主要是分析了短息的发送的一个流程,从ui点击button开始到中间层执行发送的操作,当然这里还有很多不详的地方,我也在尝试不断的完善。



    展开全文
  • 用Android 8.0的手机进行发送通知的测试,发现通知不能在系统状态栏显示出来,查看Logcat,发现warning如下 No Channel found for pkg=com.example.xx.xx, channelId=null, id=1001, tag=null… 原来是由于此条通知...

    用Android 8.0的手机进行发送通知的测试,发现通知不能在系统状态栏显示出来,查看Logcat,发现warning如下
    No Channel found for pkg=com.example.xx.xx, channelId=null, id=1001, tag=null…

    原来是由于此条通知没有查找到应用中对应的NotificationChannel的原因,而无法弹出来,查阅资料得知,NotificationChannel是Android O新增的通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道

    如果你需要发送属于某个自定义渠道的通知,你需要在发送通知前创建自定义通知渠道,示例如下:

    //ChannelId为"001",ChannelName为"my_channel"
    NotificationChannel channel = new NotificationChannel("1",
                    "my_channel", NotificationManager.IMPORTANCE_DEFAULT);
    channel.enableLights(true); //是否在桌面icon右上角展示小红点
    channel.setLightColor(Color.GREEN); //小红点颜色
    channel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知
    notificationManager.createNotificationChannel(channel);
    
    //同时,Notification.Builder需要多设置一个
    builder.setChannelId("001");
    

    一个完整的发送通知的栗子可以看
    https://blog.csdn.net/u010356768/article/details/83382446

    展开全文
  • 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息。邮件信息可能是邮件简报、状态更新(如 Cachet)、监控警报(如 Monit)、磁盘时间(如 RAID mdadm)等等。当你要建立自己的 邮件发送...
    导读 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息。邮件信息可能是邮件简报、状态更新(如 Cachet)、监控警报(如 Monit)、磁盘时间(如RAID mdadm)等等。当你要建立自己的 邮件发送服务器 传递信息时 ,你可以替代使用一个免费的公共 SMTP 服务器,从而避免遭受维护之苦。

    gmail
    谷歌的 Gmail 服务就是最可靠的 免费 SMTP 服务器 之一。想要从应用中发送邮件通知,你仅需在应用中添加 Gmail 的 SMTP 服务器地址和你的身份凭证即可。

    使用 Gmail 的 SMTP 服务器会遇到一些限制,这些限制主要用于阻止那些经常滥用服务器来发送垃圾邮件和使用邮件营销的家伙。举个例子,你一次只能给至多 100 个地址发送信息,并且一天不能超过 500 个收件人。同样,如果你不想被标为垃圾邮件发送者,你就不能发送过多的不可投递的邮件。当你达到任何一个限制,你的 Gmail 账户将被暂时的锁定一天。简而言之,Gmail 的 SMTP 服务器对于你个人的使用是非常棒的,但不适合商业的批量邮件。

    说了这么多,是时候向你们展示 如何在 Linux 环境下使用 Gmail 的 SMTP 服务器 了。

    Google Gmail SMTP 服务器设置

    如果你想要通过你的应用使用 Gmail 的 SMTP 服务器发送邮件,请牢记接下来的详细说明。
    邮件发送服务器 (SMTP 服务器): smtp.gmail.com
    使用认证:
    使用安全连接:
    用户名: 你的 Gmail 账户 ID (比如 "alice" ,如果你的邮箱为 alice@gmail.com)
    密码: 你的 Gmail 密码
    端口: 587
    确切的配置根据应用会有所不同。在本教程的剩余部分,我将向你展示一些在 Linux 上使用 Gmail SMTP 服务器的应用示例。

    从命令行发送邮件

    作为第一个例子,让我们尝试最基本的邮件功能:使用 Gmail SMTP 服务器从命令行发送一封邮件。为此,我将使用一个称为 mutt 的命令行邮件客户端。
    先安装 mutt:
    对于 Debian-based 系统:

    $ sudo apt-get install mutt

    对于 Red Hat based 系统:

    $ sudo yum install mutt

    创建一个 mutt 配置文件(~/.muttrc),并和下面一样,在文件中指定 Gmail SMTP 服务器信息。将 替换成自己的 Gmail ID。注意该配置只是为了发送邮件而已(而非接收邮件)。

    $ vi ~/.muttrc
    set from = "@gmail.com"
    set realname = "Dan Nanni"
    set smtp_url = "smtp://@smtp.gmail.com:587/"
    set smtp_pass = ""
    

    一切就绪,使用 mutt 发送一封邮件:

    $ echo "This is an email body." | mutt -s "This is an email subject" alice@yahoo.com

    想在一封邮件中添加附件,使用 "-a" 选项

    $ echo "This is an email body." | mutt -s "This is an email subject" alice@yahoo.com -a ~/test_attachment.jpg
    

    yahoomail
    使用 Gmail SMTP 服务器意味着邮件将显示是从你 Gmail 账户发出的。换句话说,收件人将视你的 Gmail 地址为发件人地址。如果你想要使用自己的域名作为邮件发送方,你需要使用 Gmail SMTP 转发服务。

    当服务器重启时发送邮件通知

    如果你在 虚拟专用服务器(VPS) 上跑了些重要的网站,建议监控 VPS 的重启行为。作为一个更为实用的例子,让我们研究如何在你的 VPS 上为每一次重启事件建立邮件通知。这里假设你的 VPS 上使用的是systemd,并向你展示如何为自动邮件通知创建一个自定义的 systemd 启动服务。
    首先创建下面的脚本 reboot_notify.sh,用于负责邮件通知。

    $ sudo vi /usr/local/bin/reboot_notify.sh
    #!/bin/sh
    echo "`hostname` was rebooted on `date`" | mutt -F /etc/muttrc -s "Notification on `hostname`" alice@yahoo.com
    
    $ sudo chmod +x /usr/local/bin/reboot_notify.sh

    在这个脚本中,我使用 "-F" 选项,用于指定系统级的 mutt 配置文件位置。因此不要忘了创建 /etc/muttrc 文件,并如前面描述的那样填入 Gmail SMTP 信息。

    现在让我们创建如下一个自定义的 systemd 服务。

    $ sudo mkdir -p /usr/local/lib/systemd/system
    $ sudo vi /usr/local/lib/systemd/system/reboot-task.service
    
    [Unit]
    Description=Send a notification email when the server gets rebooted
    DefaultDependencies=no
    Before=reboot.target
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/reboot_notify.sh
    [Install]
    WantedBy=reboot.target
    

    在创建服务后,添加并启动该服务。

    $ sudo systemctl enable reboot-task
    $ sudo systemctl start reboot-task
    

    从现在起,在每次 VPS 重启时,你将会收到一封通知邮件。
    yahoo2

    通过服务器使用监控发送邮件通知

    作为最后一个例子,让我展示一个现实生活中的应用程序,Monit,这是一款极其有用的服务器监控应用程序。它带有全面的 VPS 监控能力(比如 CPU、内存、进程、文件系统)和邮件通知功能。

    如果你想要接收 VPS 上由 Monit 产生的任何事件的邮件通知,你可以在 Monit 配置文件中添加以下 SMTP 信息。

    set mailserver smtp.gmail.com port 587
        username "" password ""
        using tlsv12
    set mail-format {
     from: @gmail.com
     subject: $SERVICE $EVENT at $DATE on $HOST
     message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
           Yours sincerely,
              Monit
      }
    # the person who will receive notification emails
    set alert alice@yahoo.com
    

    这是一个因为 CPU 负载超载而由 Monit 发送的邮件通知的例子。
    yahoo3

    总结

    如你所见,类似 Gmail 这样免费的 SMTP 服务器有着这么多不同的运用方式 。但再次重申,请牢记免费的 SMTP 服务器不适用于商业用途,仅仅适用于个人项目。无论你正在哪款应用中使用 Gmail SMTP 服务器,欢迎自由分享你的用例。


    本文转载自:http://www.linuxprobe.com/send-email-notifications-gmail-smtp-server-linux/

    免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/
    展开全文
  • Android 如何获取应用通知权限

    千次阅读 2017-03-03 20:48:01
    Android 4.1: How to check notifications are disabled for the application? 不知道你看得懂代码吗,这个勾可以在代码里检查、...系统管理通知栏权限的类是:GC: AppOpsService,所有设置界面、notificationManage
  • Android通知栏微技巧,8.0系统中通知栏的适配

    万次阅读 多人点赞 2018-04-17 07:39:11
    大家好,今天我们继续来学习Android 8.0系统的适配。...在上一篇文章当中,我们学习了Android 8.0系统应用图标的适配,那么本篇文章,我们自然要将重点放在通知栏上面了,学习一下Android 8.0系统的通知栏适配
  • vivo桌面角标通知: 网上有相关的代码实现方式,但是经过vivo官方文档没有找到对应方法,于是...但是比较坑的是要将设计角标的应用通知设为重要通知才能生效。 try { Field field = notification.getClass()...
  • 8.0通知栏新增通知渠道

    千次阅读 2018-03-30 14:30:16
    然后用户可以在设置中修改这些设置,根据应用程序来决定哪些通知可以显示或者隐藏。 创建通知渠道之后,程序无法修改通知行为,创建之后只有用户可以修改,程序只能修改渠道名称跟渠道描述。 我们可以为一个应用...
  • 因为项目用到推送功能,所以需求是知道用户是否开启了通知栏的权限,并且提供滑动按钮进行跳转以便用户进行关闭或者开启。 1.获取通知栏权限是否开启: /** * 获取通知栏权限是否开启 * */ public class ...
  • //检查系统是否关闭app应用通知权限 private boolean isNotificationEnabled(Context context) { String CHECK_OP_NO_THROW = "checkOpNoThrow"; String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; ...
  • 用TestFlight进行测试

    千次阅读 2017-08-26 00:40:26
    步骤 1在AppStore上下载TestFlight,安装,done 2允许应用发送通知 3接受邀请iTunes Connect 4接受邀请测试 5下载app安装
  • 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时、待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知。创建一个本地通知通常分为以下几个步骤: ...
  • 发送推送消息后手机接收不到通知

    千次阅读 2018-11-20 23:50:00
    省电管理: 安全中心里设置省电模式,在【待机耗电管理】中允许应用待机时,保持允许,否则手机休眠或者应用闲置一段时间,无法正常接收消息。 Funtouch OS(VIVO) 自启动管理:需要将应用加入“i管家...
  • ——本地推送通知推送通知的作用?在App退到后台或者完全退出时,可以使用通知来告诉用户某件事情,比如推送新的聊天消息、新闻等通知对应...发送通知时,如果程序正在前台允许,那么推送通知UI就不会显示出来;点击通
  • IOS 本地通知和远程通知

    千次阅读 2013-04-16 15:26:30
    编写push notification之获取device token编写push notification之服务器端发送通知iOS实现本地通知iOS实现本地通知 本地通知 本地通知,local notification,用于基于时间行为的通知,比如有关日历或者todo列表...
  • 首先手机得先开启权限应用详情 -> 自定义通知 -> 开启对应的权限2. 设置Notification的flagNotification的flag有5个。 FLAG_AUTO_CANCEL 当通知被用户点击之后会自动被清除(cancel) FLAG_INSISTENT 在用户响应...
  • Android N 通知栏和快捷通知栏带来的改变Android N 引入了一些新的API,允许应用发布具有高度可见性和交互性的通知。 Android N 扩展了现有 RemoteInput 通知 API,以支持手持式设备上的内联回复。 此功能允许用户...
  • http://leybreeze.com/blog/?p=1480 // 添加常驻通知 private void setNotification() { NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); Notif
  • 为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,详细说明每种方法的原理和实现过程,并给出实现的部分核心代码。希望能够给设备驱动程序的设计者提供一些帮助。关键词:设备驱动...
  • 这两天在做一个日程提醒功能,...scheduled time,时间周期,用来指定iOS系统发送通知的日期和时间; notification type,通知类型,包括警告信息、动作按钮的标题、应用图标上的badge(数字标记)和播放的声音; 自
  • 在十月份我们为Mobile Services... Services现在支持发送iOS推送通知!通过添加一种更简单的登陆方法,我们改善了iOS Client API;现在配置用户身份认证只需要单行的Objective-C代码。 使用此更新,现在Mobile Service
  • react-native-firebase 通知

    千次阅读 2018-07-02 16:38:20
    远程通知Firebase云消息传递(FCM)允许您的应用程序远程显示通知。为了使事情变得简单易懂,我们将React Native Firebase功能明确划分为仅限数据和通知消息。远程通知:用于在设备上显示可见通知。包含可选的数据...
  • ZooKeeper典型应用场景

    万次阅读 2017-09-27 17:51:27
    网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景进行一个分门归类的介绍。 值得注意的是,ZK并非天生就是为这些应用场景设计的,都是后来众多开发者根据其框架的特性
  • iOS监听模式系列之推送消息通知

    千次阅读 2016-06-07 22:08:05
    和本地通知不同,推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送应用客户端。下面是苹果官方关于推送通知的过程示意图: 推送通知的过程可以分为以下几步: 应用...
  • 本地通知和推送通知编程指南(1)

    千次阅读 2011-09-01 15:28:14
    关于本地通知和推送通知是两种通知应用程序的方法(通知时不需要程序在后台运行)。通知可能是一条消息,一个将要发生的日历事件,或者来自远程服务器的数据。当操作系统收到通知时,本地通知和推送通知看起来(听...
  • 聊聊应用内购买

    万次阅读 多人点赞 2019-04-21 23:04:31
    前言 上一份工作中,断断续续开发和维护了两年左右的内购,换工作后短期内应该不会做...应用审核和后续运营的注意事项; 友情提示:本文很长~ 授之以渔 以下官方资料,建议开发内购的同学静下心来通读一遍,能避免...
  • 一个典型的Wear应用程序会在一个情境的合适时刻插入一张卡片到信息流中。这张卡片可能会包含一个用于快速交互的按钮来打开一个全屏视图(在一些情况下,卡片也可能不会提供交互按钮): 以下是简单排序的构建模块。...
  • IOS实现本地通知

    千次阅读 2013-06-07 11:31:26
    另外,应用如果在后台执行,iOS允许它在受限的时间内运行,它也会发现本地通知有用。比如,一个应用,在后台运行,向应用的服务器端获取消息,当消息到达时,比如下载更新版本的提示消息,通过本地通知机制通知用户...
  • 获取App通知权限是否开启的方法

    万次阅读 2017-05-13 23:34:23
    我们有时候需要获知用户是否允许了App在通知栏显示通知,设置入口一般见于AppInfo即应用详情页面。
  • WMI技术介绍和应用——VC开发WMI应用的基本步骤

    万次阅读 多人点赞 2012-12-28 17:20:34
    在《WMI技术介绍和应用——WMI概述》中介绍了我们可以使用C++、.net或者支持ActiveX技术的脚本语言来使用WMI。但是各种语言对WMI的控制能力是不同的,比如脚本语言只能用来从WMI获取数据或者接收事件通知。而C++还...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 196,314
精华内容 78,525
关键字:

允许应用发送通知