Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

Android 后台Service : 向服务器发送心跳包

$
0
0
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 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>