public class HeartbeatService extends Service implements Runnable { private Thread mThread; public int count = 0; private boolean isTip = true; private static String mRestMsg; private static String KEY_REST_MSG = "KEY_REST_MSG"; @Override public void run() { while (true) { try { if (count > 1) { Log.i("@qi", "offline"); count = 1; if (isTip) { //判断应用是否在运行 ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> list = am.getRunningTasks(3); for (RunningTaskInfo info : list) { if (info.topActivity.getPackageName().equals("org.yhn.demo")) { //通知应用,显示提示“连接不到服务器” Intent intent = new Intent("org.yhn.demo"); intent.putExtra("msg", true); sendBroadcast(intent); break; } } isTip = false; } } if (mRestMsg != "" && mRestMsg != null) { //向服务器发送心跳包 sendHeartbeatPackage(mRestMsg); count += 1; } Thread.sleep(1000 * 3); } catch (InterruptedException e) { e.printStackTrace(); } } } private void sendHeartbeatPackage(String msg) { HttpGet httpGet = new HttpGet(msg); DefaultHttpClient httpClient = new DefaultHttpClient(); // 发送请求 HttpResponse httpResponse = null; try { httpResponse = httpClient.execute(httpGet); } catch (Exception e) { e.printStackTrace(); } if (httpResponse == null) { return; } // 处理返回结果 final int responseCode = httpResponse.getStatusLine().getStatusCode(); if (responseCode == HttpStatus.SC_OK) { //只要服务器有回应就OK count = 0; isTip = true; } else { Log.i("@qi", "responseCode " + responseCode); } } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { super.onDestroy(); } public void onStart(Intent intent, int startId) { Log.i("@qi", "service onStart"); //从本地读取服务器的URL,如果没有就用传进来的URL mRestMsg = getRestMsg(); if (mRestMsg == null || mRestMsg == "") { mRestMsg = intent.getExtras().getString("url"); } setRestMsg(mRestMsg); mThread = new Thread(this); mThread.start(); count = 0; super.onStart(intent, startId); } public String getRestMsg() { SharedPreferences prefer = getSharedPreferences("settings.data", Context.MODE_PRIVATE); Log.i("@qi", "getRestMsg() " + prefer.getString(KEY_REST_MSG, "")); return prefer.getString(KEY_REST_MSG, ""); } public void setRestMsg(String restMsg) { SharedPreferences prefer = getSharedPreferences("settings.data", Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefer.edit(); editor.putString(KEY_REST_MSG, restMsg); editor.commit(); } }
启动Service:
Intent serviceIntent = new Intent("HeartbeatService"); serviceIntent.putExtra("url",url); startService(serviceIntent);
最后别忘了注册Server和GET_TASKS
<service android:name=".demo.HeartbeatService" android:label="QServer" android:persistent="true" > <intent-filter> <action android:name="HeartbeatService" /> </intent-filter> </service>
<uses-permission android:name="android.permission.GET_TASKS" />
作者:Vestigge 发表于2013-2-1 16:07:06 原文链接
阅读:7 评论:0 查看评论