package com.maizi.util;
import java.util.List;
import android.app.ActivityManager;
import android.content.Context;
public class ServiceUtil {
public static final String SERVICE_NAME = "com.maizi.service.BussinessService";
/**
* 用来判断服务是否运行.
*
* @param context
* @param className
* 判断的服务名字
* @return true 在运行 false 不在运行
*/
public static boolean isServiceRunning(Context mContext, String className) {
boolean isRunning = false;
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(30);
if (!(serviceList.size() > 0)) {
return false;
}
for (int i = 0; i < serviceList.size(); i++) {
if (serviceList.get(i).service.getClassName().equals(className) == true) {
isRunning = true;
break;
}
}
return isRunning;
}
}
package com.maizi.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class BussinessService extends Service{
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
BussinessThread thread = new BussinessThread(this);
thread.run();
return super.onStartCommand(intent, flags, startId);
}
/**
*
* @Description: (这里用一句话描述这个类的作用) 业务线程
* @author 麦子
* @date 2014-7-16 下午2:23:22
* @version 1.01
*/
public class BussinessThread extends Thread{
private BussinessService service;
public BussinessThread(BussinessService service){
this.service = service;
}
@Override
public void run() {
super.run();
try{
Thread.sleep(10000);
Log.i("tag", "我正在处理业务,处理完后,我要关闭这个service");
Intent intent = new Intent(service,service.getClass());
stopService(intent);
Log.i("tag", "关闭这个service");
}catch(Exception e){
e.printStackTrace();
}
}
}
}
package com.maizi.broadca;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.util.Log;
import com.maizi.service.BussinessService;
import com.maizi.util.ServiceUtil;
/***
*
* @Description: (这里用一句话描述这个类的作用) 开机 和 网络连接中,启动service
* @author 麦子
* @date 2014-7-16 下午1:19:42
* @version 1.01
*/
public class BussinessBroadcastReceiver extends BroadcastReceiver {
// 监听开机广播事件
public static final String action_boot = "android.intent.action.BOOT_COMPLETED";
private ConnectivityManager connectivityManager;
private NetworkInfo info;
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
String action = intent.getAction();
if (action.equals(action_boot)) { // 开机启动
intent = new Intent(context,BussinessService.class);
context.startService(intent);
}else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
info = connectivityManager.getActiveNetworkInfo();
if (info != null) { // 网络已经连接
Log.i("tag", "---网络状态-"+info.getState());
if(info.isAvailable() && info.getState() == State.CONNECTED){
boolean bool = ServiceUtil.isServiceRunning(context,ServiceUtil.SERVICE_NAME);
Log.i("tag", "服务----"+bool);
if(!bool){
intent = new Intent(context,BussinessService.class);
context.startService(intent);
}
}
}
}
}
}
}
package com.maizi.application;
import com.maizi.service.BussinessService;
import com.maizi.util.ServiceUtil;
import android.app.AlarmManager;
import android.app.Application;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
/**
*
* @Description: (这里用一句话描述这个类的作用) 启动应用的时候启动一个Service, 心跳启动一个Service
* @author 麦子
* @date 2014-7-16 下午1:16:55
* @version 1.01
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
boolean bool = ServiceUtil.isServiceRunning(this, ServiceUtil.SERVICE_NAME);
if(!bool){
setAlarmTime(this);
}
}
private void setAlarmTime(Context context) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//Intent intent = new Intent("android.alarm.demo.action"); // 启动一个广播
//PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
// 启动一个Service
Intent intent = new Intent(context,BussinessService.class);
PendingIntent sender = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
int interval = 3* 60 * 1000;// 闹铃间隔, 这里设为3秒调用一次Service
// 第二个参数书延迟时间
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+2*1000, interval, sender);
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.maizi.activity"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name="com.maizi.application.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.maizi.activity.CheckServiceActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.maizi.broadca.BussinessBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
<service android:name="com.maizi.service.BussinessService"></service>
</application>
</manifest>