您的位置:首页 > 其它

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

2011-08-02 10:38 232 查看
一、业务逻辑:

开机自动启动服务,然后定时发送请求,根据返回的数据判断是否有新消息,有新消息的话就弹出小窗口,点击窗口打开浏览器访问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();
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: