开机自动启动服务并定时发送请求

一、业务逻辑:

开机自动启动服务,然后定时发送请求,根据返回的数据判断是否有新消息,有新消息的话就弹出小窗口,点击窗口打开浏览器访问wap页面。

二、实现代码:

    1,首先写一个Receiver类用来接受开机启动的广播,因为开机启动的时候android系统会发送一个“android.intent.action.BOOT_COMPLETED”的广播信息,我们接受这个广播信息就可以了,在onReceive()这个方法中实现自己的逻辑就可以了。

public class mReceiver extends BroadcastReceiver(){
    @Override
    public void onReceive(Context context,Intent intent){
         //在此实现自己的逻辑
         intent = new Intent(context,TimeService.class);
         context.startService(intent);//启动服务
    } 
}

    2、写一个Service类在后台定时发送请求,并实现弹出窗口,在这里有必要说明下Service的生命周期,

当调用startService()方法时:

(1)如果Service并没有启动,将先后调用onCrete()---->onStart()方法

(2)如果Service已经启动,将只调用onstart()方法

public class TimeService extends Service{
  @Override
  public void onCreate(){

  }
  @Override
  public void onStart(Intent intent,int startId){
      super.onStart(intent, startId);
      Intent mintent = new Intent(this,AlarmReceiver.class);
      PendingIntent pIntent = PendingIntetn.getBroadcast(this,0,mintent,0);
      long startTime = SystemClock.elapsedRealtime();//开始时间 
      AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SRVICE);
      //每10秒发送一个广播,时间到了将发送pIntent这个广播,在alarmReceiver中接受广播
      alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,startTime,10*1000,pIntent);
   }
}


3、写一个Receiver类来接受AlarmManager发送的广播,接受到广播之后就向服务器发送一个HttpPost请求,根据返回的数据来是否弹出小窗口。

public class AlarmReceiver extends BroadcastReceiver{
  @Override
  public void onReceive(Context context,Intent intent){
     String netJson =readTwitterFeed();
     JSONobject jsonObject  = new JSONobject(netJson.toString()).getJSONobject("userbean");
      String Uid = jsonObject.getString("Uid"); 
     String Showname = jsonObject.getString("Showname"); 
     String Avtar = jsonObject.getString("Avtar"); 
     String State = jsonObject.getString("State");
     String message = jsonObject.getString("Message");
     if("1".equal(message)){
         //弹出小窗口
     }
  }
  //返回的数据格式为:
   //{"userbean":
   //"Uid":"100","Showname":"\u75af\u72c2\u7684\u7334\u5b50","Avtar":null,"State":"1","Message":"1"}}
   // 当Message等于1的时候表示改用户有消息,就弹出窗口提示
  public StringBuilder readTwitterFeed() {
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(
               "http://twitter.com/statuses/user_timeline/vogella.json");
        try {
            HttpResponse response = client.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(content));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
            } else {
              Log.e(ParseJSON.class.toString(), "Failed to download file");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return builder.toString();
    }
}





































































         



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
后台定时定位开机自启系统android 类库中, 虽然已经提供了几种定位方式,但是从提供的功能和反应速度上,和其他的第三方定位库相比,还是相形见绌。搜索了几个第三方定位和地图的API平台,综合考虑了下,选择了百度地图。(第三方地图API的选择,具体还要根据自己的项目要求来选择)言归正传,现在就说说百度的定位API 吧 (该文章,主要是讲定位的,所以就单独说说,百度的定位API 接口)百度定位API,是 GPS 基站 WIFI IP混合定位,传感器辅助定位 ,具有 定位方式多,反应时间快等特点(具体的可以搜索一下“百度地图定位API”),下面就讲讲如何实现定时的去定位从而获取实时的定位经纬度。   实现要求: LBS应用中,缺少不了定位,但是有时,由于网络环境的不稳定等特殊情况,可能会造成定位失败的情况(获取不到定位信息或者访问延时后报错),那就需要有种补救的措施,来实时的获取一个用户当前的定位信息。该示例就是一个实时定位的助手类。   在项目开启时,开启定时定位,每隔一段时间,将经纬度保存在本地,来供应用程序的相关方法调用。   思路: 1. 定时发送定位请求,首先需要 定时器 Timer 和 TimerTask ,来定时发送定位请求; 2. 在定位的回调函数里,将定位获取的信息保存到本地   

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值