zoukankan      html  css  js  c++  java
  • Android:开机自启动并接收推送消息

    接收推送消息部分我们通过ZeroMQ实现,可以参考http://www.cnblogs.com/ilovewindy/p/3984283.html

    首先是开机自启动的功能实现,代码如下:
    1.    AndroidManifest.xml中添加如下代码:

     1 <!-- 抓取系统启动事件 -->
     2 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     3 
     4 <application>
     5 …..
     6     <service
     7             android:name="com.demo.notification.NotificationService"
     8             android:icon="@drawable/icon"
     9             android:label="@string/app_name" >
    10     </service>
    11 
    12     <receiver android:name="com.demo.notification.MyScheduleReceiver" >
    13         <intent-filter>
    14             <action android:name="android.intent.action.BOOT_COMPLETED" />
    15         </intent-filter>
    16     </receiver>
    17 </application>

    2.    接着是实现MyScheduleReceiver代码,这是当Android启动后会自动启动的程序。

    1 public class MyScheduleReceiver extends BroadcastReceiver {
    2 
    3     @Override
    4     public void onReceive(Context context, Intent intent) {
    5 
    6         Intent service = new Intent(context, NotificationService.class);
    7         context.startService(service);
    8     }
    9 }


    3.    实现NotificationService代码,用来接收推送消息

     1 public class NotificationService  extends Service {
     2     private final IBinder mBinder = new MyBinder();
     3 
     4     @Override
     5     public int onStartCommand(Intent intent, int flags, int startId) {
     6            // 将接收推送消息任务放入后台执行
     7         new ZeroMQMessageTask().execute();
     8 
     9         return Service.START_STICKY;
    10     }
    11 
    12     @Override
    13     public IBinder onBind(Intent arg0) {
    14         return mBinder;
    15     }
    16 
    17     public class MyBinder extends Binder {
    18         public NotificationService getService() {
    19             return NotificationService.this;
    20         }
    21     }
    22 
    23     private class ZeroMQMessageTask extends AsyncTask<String, Void, String> {
    24 
    25         public ZeroMQMessageTask() {
    26         }
    27 
    28         @Override
    29         protected String doInBackground(String... params) {
    30 
    31             ZMQ.Context context = ZMQ.context(1);
    32             ZMQ.Socket subscriber = context.socket(ZMQ.SUB);
    33             subscriber.subscribe(ZMQ.SUBSCRIPTION_ALL);
    34             subscriber.connect("tcp://x.x.x.x:xxxx");
    35             while (true) {                  // 通过不终止的循环来保证接收消息
    36                 message = subscriber.recvStr();
    37                 if (!message.equals("0")) {  // 0是由我自己定义的空消息标识,可以替换成自定义的其它标识
    38 
    39                     // 显示推送消息
    40                     String ns = Context.NOTIFICATION_SERVICE;
    41                     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
    42 
    43                     int icon = R.drawable.icon;
    44                     CharSequence tickerText = "Demo - " + message;
    45                     long when = System.currentTimeMillis();
    46 
    47                     Notification notification = new Notification(icon,
    48                             tickerText, when);
    49                     notification.flags |= Notification.FLAG_AUTO_CANCEL;
    50                     Context uiContext = getApplicationContext();
    51                     CharSequence contentTitle = "Demo";
    52                     CharSequence contentText = message;
    53                     Intent notificationIntent = new Intent(uiContext,
    54                             NotificationService.class);
    55                     PendingIntent contentIntent = PendingIntent
    56                             .getActivity(uiContext, 0, notificationIntent, 0);
    57 
    58                     notification.setLatestEventInfo(uiContext, contentTitle,
    59                             contentText, contentIntent);
    60 
    61                     mNotificationManager.notify(1, notification);
    62                 }
    63             }
    64         }
    65 
    66         @Override
    67         protected void onPostExecute(String result) {
    68         }
    69     }
    70 }

    好啦,重新启动手机尝试发条消息吧! :D


    服务器端的代码可以参考此文:http://www.cnblogs.com/ilovewindy/p/3998862.html

  • 相关阅读:
    2-6 R语言基础 缺失值
    2-5 R语言基础 factor
    2-4 R语言基础 列表
    2-3 R语言基础 矩阵和数组
    2-2 R语言基础 向量
    【转】Python操作MongoDB数据库
    Python程序的执行原理
    数据分析的职业规划
    自定义菜单 开发 服务器繁忙
    微信自定义菜单
  • 原文地址:https://www.cnblogs.com/ilovewindy/p/3998941.html
Copyright © 2011-2022 走看看