一、业务逻辑:
开机自动启动服务,然后定时发送请求,根据返回的数据判断是否有新消息,有新消息的话就弹出小窗口,点击窗口打开浏览器访问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(); } }