android 当中service的简单用法(用于消息推送)

用于服务器的消息推送。

基本上就是用来做新消息提醒的,比较好用这个方法。

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.support.annotation.Nullable;
import android.support.v7.app.NotificationCompat;

import com.ladongjiguang.meikuangwuziyunshu.R;
import com.ladongjiguang.meikuangwuziyunshu.activity.MainActivity;
import com.ladongjiguang.meikuangwuziyunshu.activity.OrderDetailActivity;

/**
 * Created by admin on 2016/9/2.
 */
public class MessageService extends Service {
    //获取消息线程
    private MessageThread messageThread = null;
    //通知栏通知叠加
    private int i = 0;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        //开启线程
        messageThread = new MessageThread();
        messageThread.isRunning = true;
        messageThread.start();
        return super.onStartCommand(intent, flags, startId);
    }

    /**
     * 从服务器端获取消息
     *
     */
    class MessageThread extends Thread{
        //运行状态,下一步骤有大用
        public boolean isRunning = true;//终止服务时需要终止这个子线程,赋值false
        public void run() {
            while(isRunning){
                try {
                    //休息10秒
                    Thread.sleep(10000);
                    //获取服务器消息
                    String serverMessage = getServerMessage();
                    if(serverMessage!=null&&!"".equals(serverMessage)){
                        //更新通知栏
                        /*获取状态通知栏管理*/
                        NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                        /*实例化通知栏构造器NotificationCompat.Builder*/
                        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getBaseContext());
                        /*点击事件*/
                        Intent intent = new Intent(getBaseContext(),OrderDetailActivity.class);
                        PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), 0, intent, 0);
                        /*配置通知栏*/
                        mBuilder.setContentTitle("你有新的消息")//设置通知栏标题
                                .setContentText("测试内容"+getServerMessage()) //设置通知栏显示内容
//                                .setContentIntent(pendingIntent)//通知栏点击事件
                                //	.setNumber(number) //设置通知集合的数量
                                .setTicker("通知来啦") //通知首次出现在通知栏,带上升动画效果的
                                .setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
                                .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级
                                //	.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
                                .setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
                                .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合
                                //Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音
                                // requires VIBRATE permission
                                .setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON
                        mNotificationManager.notify(i, mBuilder.build());
                        i++;
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 这里以此方法为服务器Demo,仅作示例
     * @return 返回服务器要推送的消息,否则如果为空的话,不推送
     */
    public String getServerMessage(){
        return "";
    }

    @Override
    public void onDestroy() {
        messageThread.isRunning = false;//销毁service之时,销毁子线程,必须有,否则子线程无限循环,耗电严重
        super.onDestroy();
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章