我是靠谱客的博主 英勇乐曲,最近开发中收集的这篇文章主要介绍android通知栏:Service每分钟请求一次服务器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近公司项目要求做一个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每分钟请求一次服务器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部