用于服务器的消息推送。
基本上就是用来做新消息提醒的,比较好用这个方法。
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();
}
}