/** * @description: * @author chenshiqiang E-mail:csqwyyx@163.com * @date 2014年4月22日 下午9:00:37 * @version 1.0 */ package com.csq.thesceneryalong.app; import android.annotation.TargetApi; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.Application; import android.content.ComponentName; import android.content.Context; import android.content.ServiceConnection; import android.os.Build; import android.os.IBinder; import android.os.Message; import android.os.StrictMode; import com.csq.thesceneryalong.config.Configer; import com.csq.thesceneryalong.receiver.NetworkReceiver; import com.csq.thesceneryalong.services.TrackRecordService; import com.csq.thesceneryalong.utils.DeviceUtil; import com.csq.thesceneryalong.utils.DeviceUtil.ScreenInfo; import com.csq.thesceneryalong.utils.MyHandler; import com.csq.thesceneryalong.utils.location.GpsUtil; import java.util.List; public class TsaApplication extends Application { /** * 服务状态改变,开启或关闭 */ private final int MSG_SERVICE_STATUS_UPDATE = 1; private MyHandler handler; private TrackRecordService mTrackRecordService = null; /** * 绑定服务 */ private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mTrackRecordService = ((TrackRecordService.TrackRecordBinder)service).getService(); } @Override public void onServiceDisconnected(ComponentName name) { } }; private ScreenInfo screenInfo; private NetworkReceiver networkReceiver; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); App.app = this; GpsUtil.checkGPSDevice(); screenInfo = DeviceUtil.getScreenInfo(); TrackRecordService.bindService(this, conn); setPolicy(); networkReceiver = new NetworkReceiver(); networkReceiver.regist(this); handler = new MyHandler(this){ @Override public void myHandleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) { case MSG_SERVICE_STATUS_UPDATE: //msg.arg1 == 0开启服务 boolean isStart = msg.arg1 == 0 ? true : false; if(isStart){ startForegroundIn(); }else{ stopForegroundIn(); } break; default: break; } } }; } @TargetApi(Build.VERSION_CODES.GINGERBREAD) private void setPolicy() { if (Configer.isDebugMode && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectAll() .penaltyLog() .build()); } } @Override public void onTerminate() { // TODO Auto-generated method stub super.onTerminate(); App.app = null; networkReceiver.unRegist(this); this.unbindService(conn); } private synchronized void startForegroundIn(){ if(mTrackRecordService != null){ mTrackRecordService.startForeground(); } } public synchronized void startForeground(){ Message msg = handler.obtainMessage(); msg.what = MSG_SERVICE_STATUS_UPDATE; msg.arg1 = 0; handler.removeMessages(MSG_SERVICE_STATUS_UPDATE); handler.sendMessage(msg); } private synchronized void stopForegroundIn(){ if(mTrackRecordService != null) { mTrackRecordService.stopForeground(); } } public synchronized void stopForeground() { Message msg = handler.obtainMessage(); msg.what = MSG_SERVICE_STATUS_UPDATE; msg.arg1 = 1; handler.removeMessages(MSG_SERVICE_STATUS_UPDATE); handler.sendMessage(msg); } public ScreenInfo getScreenInfo() { return screenInfo; } public int getScreenHeight() { return screenInfo.height; } public int getScreenWidth() { return screenInfo.width; } /*public int getScreenRotate(){ int orientation = display.getRotation(); if(orientation == Surface.ROTATION_0){ return 0; }else if(orientation == Surface.ROTATION_90){ return 90; }else if(orientation == Surface.ROTATION_180){ return 180; }else if(orientation == Surface.ROTATION_270){ return 270; } return 0; }*/ /** * 检查应用是否在前台显示 */ public boolean isToolsForeground() { // 获得当前运行的任务 ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); try { List<RunningTaskInfo> rti = activityManager.getRunningTasks(1); String currentPkg = rti.get(0).topActivity.getPackageName(); return currentPkg.equals(getApplicationInfo().packageName); } catch (Exception e) { // 如果正在被卸载时,会出现异常 } return false; } }