zoukankan      html  css  js  c++  java
  • android消息推送

    网上搜索到如下类似文章,经调试可行后改成自己的代码再发上来记录一下

    独立进程 
    无论程序是否正在运行,我们都要能通知到客户,我们需要一个独立进程的后台服务。 
    我们需要一个独立进程的后台服务。 
    在androidmanifest.xml中注册service时,有一个android:process属性,如果这个属性以"."开头,则为此服务开启一个 
    全局的独立进程,如果以":"开头则为此服务开启一个为此应用私有的独立进程。举个具体的例子吧,我们新建了一个 
    application,创建了主进程com.example.exerciseproc,那么: 

    <!--下面会创建一个全局的com.example.exerciseproc的独立进程--> 

     <service android:name="com.example.exerciseproc.MessageService" android:label="消息推送" android:process=".message"/>

    <!--或者--> 
    <!--下面会创建一个应用私有的com.cnblogs.tianxia:message的独立进程--> 

     <service android:name="com.example.exerciseproc.MessageService" android:label="消息推送" android:process=":message"/>

    通知用户和点击查看 

    package com.example.exerciseproc;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    import android.R;
    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;
    import android.util.Log;
    
    public class MessageService extends Service{
        private Intent msgintent=null;
        private PendingIntent msgpendingintent=null;
        private int messageNotificationID=1000;
        private Notification messageNotification=null;
        private NotificationManager msgNotificationManager=null;
        private MessageThread msgThread=null;
        @Override
        public IBinder onBind(Intent arg0) {
            // TODO Auto-generated method stub
            return null;
        }

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

    
        @Override
        public int onStartCommand(Intent intent,int flags,int startId)
        {
            messageNotification=new Notification();
            messageNotification.icon=R.drawable.star_big_on;//推送的图标
            messageNotification.tickerText="新消息";//推送标题
            messageNotification.defaults=Notification.DEFAULT_SOUND;
         messageNotification.flags=Notification.FLAG_AUTO_CANCEL;//点击后自动关闭推送 msgNotificationManager
    =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); msgintent=new Intent(this,TestProc.class);//点击推送需要跳转到的窗体 msgpendingintent=PendingIntent.getActivity(this, 0, msgintent, 0); msgThread=new MessageThread(); msgThread.isRunning=true; msgThread.start(); return super.onStartCommand(intent, flags, startId); } class MessageThread extends Thread{ public boolean isRunning=true; public void run() { try { Log.d("消息服务", "初始化监听,端口:51230"); ServerSocket socket=new ServerSocket(51230); while(isRunning) { Log.d("消息服务", "等待接收数据"); Thread.sleep(1000); Socket ReceiveSc=socket.accept(); Log.d("消息服务", "开始接收数据"); try{ BufferedReader bfr=new BufferedReader(new InputStreamReader(ReceiveSc.getInputStream(),"UTF-8")); final String msg=bfr.readLine(); Log.d("消息服务内容", msg); messageNotification.setLatestEventInfo(MessageService.this, ReceiveSc.getInetAddress().toString(), msg, msgpendingintent); msgNotificationManager.notify(messageNotificationID,messageNotification); messageNotificationID++; } catch(Exception e) { Log.d("服务器", e.getMessage()); } finally { ReceiveSc.close(); } } } catch(Exception e) { System.out.println(e.getMessage()); } } } }

    在Activity中启动服务

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
                     
              Log.d("消息服务", "正在启动消息推送服务");
              startService(new Intent(this,MessageService.class));
        }

     

  • 相关阅读:
    UICollectionView基础教学
    iOS之多线程
    即时通信之XMPP环境的搭建
    Xcode8+和iOS10+使用Masonry自动计算行高
    视频直播框架集成
    iOS 开发的几种手势
    Swift和Objective-C混编注意事项
    如何在TableView上添加悬浮按钮
    iOS中UITextView键盘回收
    iOS应用内跳转系统设置相关界面的方法
  • 原文地址:https://www.cnblogs.com/cnwhm/p/3623524.html
Copyright © 2011-2022 走看看