Android (Notification)消息推送机制

从网上查询资料学习Android消息推送机制,效果图如下:

1.首先是布局文件代码 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="hello" />

    <Button
        android:id="@+id/btnStart"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="通知" />

    <Button
        android:id="@+id/btnStop"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="清除" />

</LinearLayout>

2.然后是java主界面代码MainActivity.java

package com.example.notificationservice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    private Button btnStart;
    private Button btnStop;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        btnStart = (Button) findViewById(R.id.btnStart);
        btnStop = (Button) findViewById(R.id.btnStop);
        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.btnStart) {
            // 启动Service
            Intent intent = new Intent();
            intent.setAction("ymw.MY_SERVICE");
            startService(intent);
        }
        if (id == R.id.btnStop) {
            // 关闭Service
            Intent intent = new Intent();
            intent.setAction("ymw.MY_SERVICE");
            stopService(intent);
        }
    }

    @Override
    public void onBackPressed() {
        System.exit(0);
        super.onBackPressed();
    }

}

3.然后是消息推送服务文件 NotificationService.java

package com.example.notificationservice;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;

public class NotificationService extends Service {

    // 获取消息线程
    private MessageThread messageThread = null;

    // 点击查看
    private Intent messageIntent = null;
    private PendingIntent messagePendingIntent = null;

    // 通知栏消息
    private int messageNotificationID = 1000;
    private Notification messageNotification = null;
    private NotificationManager messageNotificatioManager = null;

    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 初始化
        messageNotification = new Notification();
        messageNotification.icon = R.drawable.ic_launcher;
        messageNotification.tickerText = "新消息";
        messageNotification.defaults = Notification.DEFAULT_SOUND;
        messageNotificatioManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        messageIntent = new Intent(this, MainActivity.class);
        messagePendingIntent = PendingIntent.getActivity(this, 0,
                messageIntent, 0);

        // 开启线程
        messageThread = new MessageThread();
        messageThread.isRunning = true;
        messageThread.start();

        return super.onStartCommand(intent, flags, startId);
    }

    /**
     * 从服务器端获取消息
     *
     */
    class MessageThread extends Thread {
        // 设置是否循环推送
        public boolean isRunning = true;

        public void run() {
            // while (isRunning) {
            try {
                // 间隔时间
                Thread.sleep(1000);
                // 获取服务器消息
                String serverMessage = getServerMessage();
                if (serverMessage != null && !"".equals(serverMessage)) {
                    // 更新通知栏
                    messageNotification.setLatestEventInfo(
                            getApplicationContext(), "新消息", "您有新消息。"
                                    + serverMessage, messagePendingIntent);
                    messageNotificatioManager.notify(messageNotificationID,
                            messageNotification);
                    // 每次通知完,通知ID递增一下,避免消息覆盖掉
                    messageNotificationID++;
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // }
        }
    }

    @Override
    public void onDestroy() {
        // System.exit(0);
        messageThread.isRunning = false;
        super.onDestroy();
    }

    /**
     * 模拟发送消息
     *
     * @return 返回服务器要推送的消息,否则如果为空的话,不推送
     */
    public String getServerMessage() {
        return "NEWS!";
    }
}

4.最后别忘了在mainfeast.xml文件中配置Service

项目代码如下链接:

http://files.cnblogs.com/_ymw/NotificationService_%E5%8D%9A%E5%AE%A2%E9%99%84%E4%BB%B6.rar

时间: 2024-10-15 23:22:24

Android (Notification)消息推送机制的相关文章

Android消息推送机制

1.推送方式基础知识: 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最新的地震信息.要获取服务器 上不定时更新的信息一般来说有两种方法,第一种是客户端使用Pull(拉)的方式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现.第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上.? 虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push is

Android与iOS系统的消息推送机制

相信大家在使用iPhone版微信的时候都会有这样的经历,微信已经处于关闭状态了(后台进程运行一段时间就被系统杀掉),这时候我们收到了一个消息提醒,打开微信应用,微信显示“连接中…”和“收取中…”,然后再次显示一次刚才系统推送给我的消息通知.对这个现象比较好奇,于是去知乎上查一下资料,发现知乎上的热心人还真多,看了大家的回答之后,总结如下: [之所以去知乎查看技术问题,因为我并非技术人员,而知乎上很多开发人员是会用通俗易懂的方式解释好技术问题的,因为里面有不少大牛.] 先介绍一下两个重要的消息推送

API 23之消息推送机制

作为一个菜鸟,每个星期写一篇随笔来记录这周所学是很有必要的: 1.gson解析json,重点在于构建json数据的实体类,不过现在android studio里有gson Formart这个快速构建实体类的工具了,所以比较容易上手. 2.thinkandroid框架中的联网请求,同步(SyncHttpClient),异步(AsyncHttpClient),但可能有点过时了,毕竟这个框架几年都没有更新维护了. 3.自定义空间及属性. 4.glide图片加载缓存,okhttp联网请求及其封装的类Ok

APP消息推送机制的实现(PUSH)

出于好奇,想了解一下消息推送机制,在网上搜索到了几篇文章,感觉还不错,粘贴下来,等真正用到的时候再仔细研究 以下两篇是关于ios的 1.http://blog.csdn.net/xyxjn/article/details/40898183 2.http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html 以下一篇是关于android的 3.http://www.cnblogs.com/wxishang1991/p/521940

iPhone消息推送机制实现与探讨

最近两天在研究ios的消息推送机制.研究这个东西,还是充满兴趣的. Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 上图可以分为三个阶段. 第一阶段:.net应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在

苹果apns消息推送机制

苹果apns消息推送机制[电薇:132乄8688乄4109][Q群780516296]声声叹!鲁能球迷被恒大踢服了 保住前三依旧是目标Space X发推秀宇航员进出臂 设计科幻美"力挺"被"断交"的台湾 马英九讽:无说服力深度|中日游泳PK中国差在哪?个别高手长期未突破日本防卫省敲定2019预算申请 总额5.2986万亿日-传软银决定不向电动汽车企业蔚来进行投资围堵P2P恶意逃废债 纳入征信"进行时"大连瓦房店市委书记被查 曾批落马前同僚教训深刻

5.Android消息推送机制简单例子

1.首先布局文件xml代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width=&

Android本地消息推送

项目介绍:cocos2dx跨平台游戏 项目需求:实现本地消息推送,需求①:定点推送:需求②:根据游戏内逻辑实现推送(比如玩家体力满时,需要计算后到点推送):需求③:清理后台程序或重启后依然能够实现本地推送. 功能实现:由于IOS有一套比较成熟的UILocalNotification推送机制,这里主要说明Android下的实现.另外大家感兴趣可以看下第三方的推送:个推.极光.腾讯信鸽.百度云推送等,第三方多是要接入服务端,否则只能自己在第三方申请的应用的后台手动推送,另外第三方也不保证能100%所

iOS消息推送机制的实现

iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器. 上图可以分为三个阶段: 第一阶段:应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone. 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设