概述
最近公司项目要求做一个service,要求去每分钟请求一次服务器的数据,所以在此记录一下。
首先,我们建一个MyService的类,继承Service,
public class MyService extends Service {
}
然后在manifest里注册
然后就Service实现的几个方法
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO
return null;
}
/**
* 每次创建服务时,一个Service只会创建一次
*/
@Override
public void onCreate() {
super.onCreate();
Log.e("oncreat", "onCreate");
}
/**
* 通知到前台的消息:登录时启动
* @param
* @param
*/
public void messagelogin(){
NotificationCompat.Builder builder =new NotificationCompat.Builder(this);
Intent intent=new Intent(MyService.this, MainActivity.class);
PendingIntent pi= PendingIntent.getActivity(this,0,intent,0);
builder.setContentTitle("新通知") //消息标题
.setContentText("一条新通知来了")//消息内容
.setTicker("您有一条新通知") //未下拉时 浮动显示
.setWhen(System.currentTimeMillis())// 时间
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) //系统默认的铃声
.setSmallIcon(R.drawable.ic_logo)//显示的图标
.setOngoing(true)//禁止滑动删除
.setAutoCancel(false)//点击后不消失
.setContentIntent(pi);//点击后进入的页面
Notification notification= builder.build();
startForeground(1,notification);
}
/**
* 通知到前台的消息 有新的消息
* 参数可自己修改
* @param title
* @param msg
*/
public void message(String title,String msg,int type,int countMsg,DUnitFacilitiesMonitorInfo info1,DOutdoorFirehydrantInfo info2){
Intent intent=new Intent();
***
这里是我的一些逻辑代码
***
//消息通知
//PendingIntent.FLAG_UPDATE_CURRENT:携带参数,点进去以后可以得到这个intent携带的数据
//但是,intent跳进去的Activity在manifest里设置android:launchMode="singleTask"
//如果不需要intent携带数据,直接为0即可
NotificationCompat.Builder builder =new NotificationCompat.Builder(this);
PendingIntent pi= PendingIntent.getActivity(this,countMsg,intent,PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentTitle(title) //消息标题
.setContentText(msg)//消息内容
.setTicker(msg) //未下拉时 浮动显示
.setWhen(System.currentTimeMillis())// 时间
.setDefaults(Notification.DEFAULT_LIGHTS) //灯光
.setDefaults(Notification.DEFAULT_VIBRATE)// 震动
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) //系统默认的铃声
.setSmallIcon(R.drawable.ic_logo) //小图标
.setOngoing(false)//可以删除
.setAutoCancel(true)//点击后消失
.setContentIntent(pi); //点击跳转到
//火警通知铃声定制:火警及烟感火警
builder.setSound(Uri.parse(“android.resource://” + this.getPackageName() + “/” +R.raw.mp3_fire_call));//自定义的铃声
builder.setDefaults(Notification.FLAG_INSISTENT);//消息一直不停的响,知道用户点击消息才停止
Notification notification= builder.build();
NotificationManager notificationManager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(countMsg, notification);
}
//查询火警或者设备故障建筑坐标
private void searchFireOrError() {
//请求服务器
}
//查询火警或者设备故障建筑坐标
private void afterSearchFireOrError(boolean result, String responseStr) {
if (result) {
//返回的数据
}
}
/**
* 通知前台消息
*/
private void pushMonitorMessage(DUnitFacilitiesMonitorInfo info){
message("这里是我的项目内容,可自己修改")
}
/**
* 每次服务启动时
*/
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.obj != null) {
Intent intent = (Intent) msg.obj;
run(intent);
}
}
};
int time;
private void run(Intent intent) {
if (spUtil.contains(Constant.key_Service_Cycle_Time)) {
time = spUtil.getInt(Constant.key_Service_Cycle_Time);
} else {
time = 15;//默认15秒
}
if (intent != null && intent.getExtras() != null) {
userInfo = (LoginResponseData) intent.getExtras().getSerializable(Constant.Key_Session_UserInfo);
if (null != userInfo && null != userInfo.getDatas()) {
//TODO
searchFireOrError();
}
}
Message msg = handler.obtainMessage();
msg.obj = intent;
handler.sendMessageDelayed(msg, time * 1000);//60000
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
//查询是否有火警or设备故障信息
run(intent);
return super.onStartCommand(intent, flags, startId);
}
/**
* 服务销毁时
*/
@Override
public void onDestroy() {
super.onDestroy();
handler.removeCallbacksAndMessages(null);//停止服务
}
以后就是Service的全部,然后我们需要在登录的时候启动:
/**
* 启动消息通知服务//unbindService(conn); 解绑
*/
Intent intent=new Intent(this, MyService.class);
Bundle bundle=new Bundle();
intent.putExtras(bundle);
startService(intent);
然后退出的时候,就销毁服务:
//销毁服务
Intent intent=new Intent(MainActivity.this, MyService.class);
stopService(intent);
经过测试发现,在android6.0以上的系统中,息屏状态下,服务会被杀死
那么我们就在service启动的时候这样搞一下:
//电源管理,防止息屏时service被杀死
PowerManager pm= (PowerManager) getSystemService(Context.POWER_SERVICE);
wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,”myservice”);
wl.acquire();
在service停用的时候:
if (wl.isHeld()) {
wl.release();//释放唤醒锁
}
在mainfest加入权限:
以上!
最后
以上就是英勇乐曲为你收集整理的android通知栏:Service每分钟请求一次服务器的全部内容,希望文章能够帮你解决android通知栏:Service每分钟请求一次服务器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复