package com.android.settings; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ComponentName; import android.os.IBinder; import android.os.PowerManager; import android.os.SystemClock; import android.util.Log; import android.os.Handler; import android.os.Environment; import android.os.Binder; import android.os.Build; import android.os.ServiceManager; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.io.FileWriter; import java.util.List; import android.os.SystemProperties; import android.content.pm.PackageManager; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.ApplicationInfo; import android.text.TextUtils; import android.provider.Settings; import android.app.ActivityManager; import android.net.Uri; import android.app.PackageInstallObserver; import android.content.pm.ResolveInfo; import android.app.AlarmManager; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.net.wifi.WifiConfiguration.AuthAlgorithm; import android.net.wifi.WifiConfiguration.KeyMgmt; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import org.ido.iface.DeviceCtrl; import android.os.ServiceManager; import android.os.Parcel; import android.os.RemoteException; //import com.android.settings.development; public class IdoDevCustomService extends Service { private static final String TAG = "IdoDevCustomService"; private static final String ACTION_APK_INSTALL = "android.intent.action.SILENT_INSTALL_PACKAGE"; private static final String ACTION_TOUCH_TEST = "android.ido.intent.action.touchtest"; private static final String ACTION_IDO_SET_REBOOT = "android.ido.intent.action.set.reboot"; private static final String ACTION_IDO_SET_SHUTDOWN = "android.ido.intent.action.set.shutdown"; private static final String ACTION_IDO_SET_FACTORY = "android.ido.intent.action.set.factory"; private static final String ACTION_IDO_SET_AIRPLANE_MODE = "android.ido.intent.action.set.airPlaneMode"; private static final String ACTION_IDO_SET_APP_CHECK = "android.ido.intent.action.set.appcheck"; private static final String ACTION_IDO_SCREEN_SHOT = "android.ido.intent.action.screenshot"; private static final String ACTION_IDO_SET_TIME = "android.ido.intent.action.settime"; private static final String ACTION_IDO_SET_WIFIAP = "android.ido.intent.action.wifiap"; private static final String ACTION_IDO_SET_SCREEN_BRIGHTNESS = "android.ido.action.screen.brightness"; private static final String ACTION_IDO_SET_SCREEN = "android.ido.action.screen.set"; private static final String ACTION_IDO_SET_SCREEN_ONOFF_GET = "android.ido.action.screenoff.get"; private static final String ACTION_IDO_SET_TIMEOUT_SLEEP = "android.ido.action.sleep.set"; private static final String ACTION_IDO_GET_TIMEOUT_SLEEP = "android.ido.action.sleep.get"; private static final String ACTION_IDO_SET_LAUNCHER = "android.ido.intent.action.launcher"; private static final String ACTION_IDO_GET_APK_INSTALLED = "android.ido.intent.action.apk.installed"; private static final String ACTION_IDO_SET_ADB = "android.ido.intent.action.adb"; private static final String ACTION_IDO_SET_INPUT = "android.ido.intent.action.reset.sleep"; private Context mContext; private static final boolean DEBUG = true; private static final int PACKAGE_NAME_START_INDEX = 8; private static final int CHECK_APP_LOOP_TIME = 2100;//ms private static final int TS_CHECK_LOOP_TIME1 = 1000;//ms private static final int TS_CHECK_LOOP_TIME2 = 230;//ms private static int NO_TOUCH_CNT_TIMEOUT = 600;//600;//10分钟 private static String installPackageName=""; private static String installClassName=""; private boolean installedStartActivityFlag=false; private static boolean enableAppCheck=false; private static String checkPackageName=""; private static String runClassName=""; private static int checkAppCnt=5;//检测APP是否在界面显示的次数,大于此次数还没有发现APP在前端运行则重启app private static int checkAppErrCnt=0; private AlarmManager mAlarmManager = null; private WifiManager mWifiManager; private WifiConfiguration mWifiConfig = null; private int wifiApState = WifiManager.WIFI_AP_STATE_DISABLED; private boolean restartWifiApFlag=false; private static int lastTsCnt,noTouchDataCnt,onTouchFlag=0; private IBinder mSurfaceFlinger; //private static int blBrightness; private DeviceCtrl mDevCtrl; private static int ts_check_loop_time=TS_CHECK_LOOP_TIME1; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); if(DEBUG) Log.d(TAG, "-----------------onCreate()"); mContext = this; IntentFilter mFilter = new IntentFilter(); IntentFilter mFilter2 = new IntentFilter(); mFilter.addAction(ACTION_APK_INSTALL); mFilter.addAction(ACTION_TOUCH_TEST); mFilter.addAction(ACTION_IDO_SET_REBOOT); mFilter.addAction(ACTION_IDO_SET_SHUTDOWN); mFilter.addAction(ACTION_IDO_SET_FACTORY); mFilter.addAction(ACTION_IDO_SET_AIRPLANE_MODE); mFilter.addAction(ACTION_IDO_SET_APP_CHECK); mFilter.addAction(ACTION_IDO_SCREEN_SHOT); mFilter.addAction(ACTION_IDO_SET_TIME); mFilter.addAction(ACTION_IDO_SET_WIFIAP); mFilter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); mFilter.addAction(ACTION_IDO_SET_SCREEN_BRIGHTNESS); mFilter.addAction(ACTION_IDO_SET_SCREEN); mFilter.addAction(ACTION_IDO_SET_SCREEN_ONOFF_GET); mFilter.addAction(ACTION_IDO_SET_LAUNCHER); mFilter.addAction(ACTION_IDO_SET_TIMEOUT_SLEEP); mFilter.addAction(ACTION_IDO_GET_TIMEOUT_SLEEP); mFilter.addAction(ACTION_IDO_SET_ADB); mFilter.addAction(ACTION_IDO_SET_INPUT); registerReceiver(mReceiver, mFilter); mFilter2.addAction(Intent.ACTION_PACKAGE_ADDED); //mFilter2.addAction(Intent.ACTION_PACKAGE_REPLACED);//替换安装也会有ADDED广播 mFilter2.addDataScheme("package"); registerReceiver(mReceiver2, mFilter2); try { mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); } catch (Exception e) { Log.e(TAG, "Get AlarmManager error!\n"); e.printStackTrace(); } try { mDevCtrl = new DeviceCtrl(); //blBrightness = getSystemBrightness(); } catch (Exception e) { Log.e(TAG, "DeviceCtrl error!\n"); e.printStackTrace(); } try { if ("true".equals(SystemProperties.get("persist.ido.appcheck.enable","false"))) { checkPackageName = SystemProperties.get("persist.ido.appcheck.packageName",""); runClassName = SystemProperties.get("persist.ido.appcheck.className",""); checkAppCnt = Integer.parseInt(SystemProperties.get("persist.ido.appcheck.checkCnt","3"));//unit:2s,//检测APP是否在界面显示的次数,大于此次数还没有发现APP在前端运行则重启app,默认3次 if (runClassName.equals("") == false && runClassName.equals("") == false) { mHandler.postDelayed(appCheckRunnable, 2 * CHECK_APP_LOOP_TIME); enableAppCheck = true; } } NO_TOUCH_CNT_TIMEOUT = Integer.parseInt(SystemProperties.get("persist.ido.screen.timeout","600")); Log.d(TAG, "set no touch screen timeout:" + NO_TOUCH_CNT_TIMEOUT); //mHandler.postDelayed(noTouchCheckRunnable, TS_CHECK_LOOP_TIME1); } catch (Exception e) { Log.e(TAG, "error:\n" + e); e.printStackTrace(); } //mSurfaceFlinger = ServiceManager.getService("android.ui.ISurfaceComposer"); //try { // final Parcel data = Parcel.obtain(); // data.writeInterfaceToken("android.ui.ISurfaceComposer"); // data.writeInt(1); // mSurfaceFlinger.transact(1008, data, null, 0); // Log.d(TAG, "----------------- run mSurfaceFlinger.transact(1008)"); //}catch (RemoteException ex) { // Log.d(TAG, "----------------- mSurfaceFlinger.transact error"); //} } @Override public void onDestroy() { unregisterReceiver(mReceiver); unregisterReceiver(mReceiver2); super.onDestroy(); } private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { try { String action = intent.getAction(); if(action.equals(ACTION_APK_INSTALL)) { String path = intent.getStringExtra("apkFilePath"); if (path != null) { installPackageName = getPackage(mContext,path); if (installPackageName != null) { if (intent.getBooleanExtra("allPrms",false)) { SystemProperties.set("persist.app.grant.prms",installPackageName); } silentInstallApk(path); if (intent.getBooleanExtra("autostart",false)) { installedStartActivityFlag = true; } } } Log.d(TAG,"start install apk name:" + installPackageName); } else if(action.equals(ACTION_TOUCH_TEST)) { int enable = intent.getIntExtra("enable",0); if(DEBUG) Log.d(TAG,"touch test enable:" + enable); if (enable == 1) { //Settings.Global.getInt(mContext.getContentResolver(), //Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1); //开启开发者模式 Settings.System.putInt(mContext.getContentResolver(),//开启指针位置 Settings.System.POINTER_LOCATION, 1); } else { //Settings.Global.putInt(mContext.getContentResolver(),//关闭开发者模式 //Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0); Settings.System.putInt(mContext.getContentResolver(),//开启指针位置 Settings.System.POINTER_LOCATION, 0); } } else if(action.equals(ACTION_IDO_SET_SHUTDOWN)) { systemShutdown(intent.getBooleanExtra("confirm",true)); //systemShutdown(false); } else if(action.equals(ACTION_IDO_SET_REBOOT)) { systemReboot(intent.getBooleanExtra("confirm",true)); } else if(action.equals(ACTION_IDO_SET_FACTORY)) { doMasterClear(); } else if(action.equals(ACTION_IDO_SET_AIRPLANE_MODE)) { setAirPlaneMode(intent.getBooleanExtra("enable",false)); } else if(action.equals(ACTION_IDO_SET_APP_CHECK)) { if (intent.getBooleanExtra("enable",false)) { checkAppErrCnt = 0; enableAppCheck = true; mHandler.removeCallbacks(appCheckRunnable); mHandler.postDelayed(appCheckRunnable, CHECK_APP_LOOP_TIME); checkPackageName = intent.getStringExtra("packageName"); runClassName = intent.getStringExtra("className"); checkAppCnt = intent.getIntExtra("checkCnt",3);//unit:2s,//检测APP是否在界面显示的次数,大于此次数还没有发现APP在前端运行则重启app,默认3次 SystemProperties.set("persist.ido.appcheck.packageName",checkPackageName); SystemProperties.set("persist.ido.appcheck.className",runClassName); SystemProperties.set("persist.ido.appcheck.checkCnt",""+checkAppCnt); SystemProperties.set("persist.ido.appcheck.enable",""+enableAppCheck); } else { enableAppCheck = false; checkAppErrCnt = 0; mHandler.removeCallbacks(appCheckRunnable); SystemProperties.set("persist.ido.appcheck.enable",""+enableAppCheck); } } else if(action.equals(ACTION_IDO_SCREEN_SHOT)) { String savePath = intent.getStringExtra("path"); String id = intent.getStringExtra("id"); if (savePath != null && id != null) screenshot(savePath,id); else if (savePath != null && id == null) screenshot(savePath,"0"); } else if(action.equals(ACTION_IDO_SET_TIME)) { int[] time = intent.getIntArrayExtra("time"); int year = time[0]; int month = time[1] - 1; int day = time[2]; int hour = time[3]; int minute = time[4]; int second = time[5]; setDateAndTime(year,month,day,hour,minute,second); } else if(action.equals(ACTION_IDO_SET_WIFIAP)) { mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); if (mWifiManager != null) mWifiConfig = mWifiManager.getWifiApConfiguration(); if (mWifiManager != null && intent.getBooleanExtra("enable",false)) { if (mWifiConfig == null) { mWifiConfig = new WifiConfiguration(); String ssid = intent.getStringExtra("name"); if (ssid != null && ssid.length() != 0) { mWifiConfig.SSID = ssid; } else { mWifiConfig.SSID = "wifiAp";//默认名称 } mWifiConfig.apBand = 0; mWifiConfig.allowedKeyManagement.set(KeyMgmt.WPA2_PSK); mWifiConfig.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); String mPassword = intent.getStringExtra("password"); if (mPassword != null && mPassword.length() >= 8) { mWifiConfig.preSharedKey = mPassword; mWifiManager.setWifiApConfiguration(mWifiConfig); if (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED) { Log.d(TAG, "wifi ap is enabled,first stop ap!\n"); mWifiManager.stopSoftAp(); restartWifiApFlag = true; } else if (mWifiManager.startSoftAp(mWifiConfig)) { Log.d(TAG, "Start wifi ap ok!\n"); } else { Log.d(TAG, "Start ap failed!\n"); } } else { Log.e(TAG, "Set Wifi ap password length error!\n"); } } else { String ssid = intent.getStringExtra("name"); if (ssid != null && ssid.length() != 0) { mWifiConfig.SSID = ssid; } else { mWifiConfig.SSID = "wifiAp";//默认名称 } mWifiConfig.apBand = 0; mWifiConfig.allowedKeyManagement.set(KeyMgmt.WPA2_PSK); mWifiConfig.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); String mPassword = intent.getStringExtra("password"); if (mPassword != null && mPassword.length() >= 8) { mWifiConfig.preSharedKey = mPassword; mWifiManager.setWifiApConfiguration(mWifiConfig); if (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED) { Log.d(TAG, "wifi ap is enabled,first stop ap!\n"); mWifiManager.stopSoftAp(); restartWifiApFlag = true; } else if (mWifiManager.startSoftAp(mWifiConfig)) { Log.d(TAG, "Start wifi ap ok!\n"); } else { Log.d(TAG, "Start ap failed!\n"); } } else { Log.e(TAG, "Set Wifi ap password length error!\n"); } } } else if (mWifiManager != null) { if (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED && mWifiManager.stopSoftAp()) { if(DEBUG) Log.d(TAG, "Stop wifi ap ok!\n"); } else if (wifiApState == WifiManager.WIFI_AP_STATE_DISABLED) { Log.d(TAG, "wifi ap default is disabled!\n"); } else { Log.d(TAG, "Stop wifi ap failed!\n"); } } else { Log.e(TAG, "Wifi manager is null!\n"); } } else if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(action)) { int state = intent.getIntExtra( WifiManager.EXTRA_WIFI_AP_STATE, WifiManager.WIFI_AP_STATE_FAILED); if (state == WifiManager.WIFI_AP_STATE_FAILED) { int reason = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_FAILURE_REASON, WifiManager.SAP_START_FAILURE_GENERAL); handleWifiApStateChanged(state, reason); } else { handleWifiApStateChanged(state, WifiManager.SAP_START_FAILURE_GENERAL); } } else if(action.equals(ACTION_IDO_SET_SCREEN)) { String scState = intent.getStringExtra("screen"); if (mDevCtrl != null && scState != null && scState.equals("off")) { //blBrightness = getSystemBrightness(); mDevCtrl.set_backlight_brightness(0);//关闭LCD背光 setUserLed(1,0);//关闭编码器灯 noTouchDataCnt = NO_TOUCH_CNT_TIMEOUT - 1; } else if (mDevCtrl != null && scState != null && scState.equals("on")) { mDevCtrl.set_backlight_brightness(getSystemBrightness()); setUserLed(1,1);//开启编码器灯 noTouchDataCnt = 0; } String tpState = intent.getStringExtra("tp"); if (tpState != null && tpState.equals("off")) { setDisableTs(true); } else if (tpState != null && tpState.equals("on")) { setDisableTs(false); } int time = intent.getIntExtra("timeout",2147483600); if (time != 2147483600) { noTouchDataCnt = 0; NO_TOUCH_CNT_TIMEOUT = time; SystemProperties.set("persist.ido.screen.timeout",""+NO_TOUCH_CNT_TIMEOUT); Log.d(TAG, "set no touch screen timeout:" + NO_TOUCH_CNT_TIMEOUT); } } else if (action.equals(ACTION_IDO_SET_SCREEN_BRIGHTNESS)) { setSystemBrightness(intent.getIntExtra("value",200)); } else if (action.equals(ACTION_IDO_SET_TIMEOUT_SLEEP)) { int time = intent.getIntExtra("time",-1); if (time == -1) { Settings.System.putInt(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, (int)2147483647); } else if (time != 0) { Settings.System.putInt(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, (int)time*1000); } } else if (action.equals(ACTION_IDO_GET_TIMEOUT_SLEEP)) { final long displayTimeout = Math.max(0,Settings.System.getInt(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, 0)); Intent intent1 = new Intent("android.ido.action.sleep.time"); intent1.putExtra("time",(int)(displayTimeout/1000)); mContext.sendBroadcast(intent1); } else if (ACTION_IDO_SET_LAUNCHER.equals(action)) { String launcherPackageName = intent.getStringExtra("packageName"); String launcherClassName = intent.getStringExtra("className"); if (launcherPackageName != null && launcherClassName != null) { SystemProperties.set("persist.ido.launcher.packagename",launcherPackageName); SystemProperties.set("persist.ido.launcher.classname",launcherClassName); } } else if(action.equals(ACTION_IDO_SET_SCREEN_ONOFF_GET)) { Intent intent1 = new Intent("android.ido.action.screenoff.time"); intent1.putExtra("timeout",NO_TOUCH_CNT_TIMEOUT); mContext.sendBroadcast(intent1); } else if(action.equals(ACTION_IDO_SET_ADB)) { if (intent.getBooleanExtra("enable",false)) { Settings.Secure.putInt(mContext.getContentResolver(),Settings.Global.ADB_ENABLED,1); } else { Settings.Secure.putInt(mContext.getContentResolver(),Settings.Global.ADB_ENABLED,0); } } else if(action.equals(ACTION_IDO_SET_INPUT)) { setInputReport(); } } catch (Exception e) { if(DEBUG) Log.d(TAG, "BroadcastReceiver error:\n" + e); } } }; private void setSystemBrightness(int val) { try { Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,val); } catch (Exception e) { Log.e(TAG, "setSystemBrightness error:\n" + e); } } private final BroadcastReceiver mReceiver2 = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { try { if(intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) { String data = intent.getDataString(); if(data == null || data.length() <= PACKAGE_NAME_START_INDEX) { return; } String packageName = data.substring(PACKAGE_NAME_START_INDEX); Log.d(TAG,"apk installed package name:" + packageName + ",auto start:" + installedStartActivityFlag); Intent intent1 = new Intent(ACTION_IDO_GET_APK_INSTALLED); intent1.putExtra("packageName",packageName); mContext.sendBroadcast(intent1); if(installedStartActivityFlag && packageName.equals(installPackageName)) { SystemProperties.set("persist.ido.launcher.kill","true"); startApkActivity(context,installPackageName); installPackageName = null; installedStartActivityFlag = false; SystemProperties.set("persist.ido.launcher.kill","false"); } } /*else if(intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) { String data = intent.getDataString(); if(data == null || data.length() <= PACKAGE_NAME_START_INDEX) { return; } String packageName = data.substring(PACKAGE_NAME_START_INDEX); if(packageName.equals(installPackageName) ) { startApkActivity(context,installPackageName); } if(DEBUG) Log.d(TAG,"replace installed apk name:" + packageName); }*/ } catch (Exception e) { Log.e(TAG, "" + e); } } }; private void handleWifiApStateChanged(int state, int reason) { switch (state) { case WifiManager.WIFI_AP_STATE_ENABLED: wifiApState = WifiManager.WIFI_AP_STATE_ENABLED; break; case WifiManager.WIFI_AP_STATE_DISABLED: wifiApState = WifiManager.WIFI_AP_STATE_DISABLED; if (restartWifiApFlag) { restartWifiApFlag = false; if (mWifiManager != null && mWifiManager.startSoftAp(mWifiConfig)) Log.d(TAG, "Start wifi ap ok!\n"); else Log.d(TAG, "Start ap failed!\n"); } break; } } private Handler mHandler = new Handler(); private Runnable apkRunnable = new Runnable() { @Override public void run() { try { Intent intent = new Intent(); if (installPackageName != null && installClassName != null) { intent.setClassName(installPackageName,installClassName); startActivity(intent); } } catch (Exception e) { Log.e(TAG, e.toString()); } } }; private Runnable appCheckRunnable = new Runnable() { @Override public void run() { try { String processActivity = ""; ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); //获取正在运行的task列表,其中1表示最近运行的task,通过该数字限制列表中task数目,最近运行的靠前 List runningTaskInfos = manager.getRunningTasks(1); if (runningTaskInfos != null && runningTaskInfos.size() != 0) { processActivity = (runningTaskInfos.get(0).baseActivity).getPackageName(); if(DEBUG) Log.d(TAG, "Current Activity Package Name:" + processActivity); } if(DEBUG) Log.d(TAG, "Check app Package Name:" + checkPackageName); if(DEBUG) Log.d(TAG, "Check app Class Name:" + runClassName); if (checkPackageName != null && processActivity.compareTo(checkPackageName) != 0) { checkAppErrCnt++; if (checkAppCnt > 0 && checkAppErrCnt >= checkAppCnt) { checkAppErrCnt = 0; Intent intent = new Intent(); if (checkPackageName != null && runClassName != null && checkPackageName.equals("") == false && runClassName.equals("") == false) { intent.setClassName(checkPackageName,runClassName); startActivity(intent); } else { Log.e(TAG, "checkAppErr,packageName:" + checkPackageName + ",ClassName" + runClassName); enableAppCheck = false; } } } else { checkAppErrCnt = 0; } if(DEBUG) Log.d(TAG, "checkAppErrCnt:" + checkAppErrCnt); } catch (Exception e) { Log.e(TAG, e.toString()); } if (enableAppCheck && appCheckRunnable != null) mHandler.postDelayed(appCheckRunnable, CHECK_APP_LOOP_TIME); } }; private Runnable noTouchCheckRunnable = new Runnable() { @Override public void run() { try { int temp = getTsCnt(); if (lastTsCnt != temp) { lastTsCnt = temp; noTouchDataCnt = 0; if (onTouchFlag == 1) { onTouchFlag = 0; setUserLed(1,1);//开启编码器灯 setDisableTs(false); Log.d(TAG,"====>has touch on backlight!!!"); //开启LCD背光 if (mDevCtrl != null) { mDevCtrl.set_backlight_brightness(getSystemBrightness()); Intent intent1 = new Intent("android.ido.action.screenon.now"); //intent1.putExtra("timeout",NO_TOUCH_CNT_TIMEOUT); mContext.sendBroadcast(intent1); ts_check_loop_time = TS_CHECK_LOOP_TIME1; } } } else { noTouchDataCnt++; if ((NO_TOUCH_CNT_TIMEOUT != -1) && (noTouchDataCnt == NO_TOUCH_CNT_TIMEOUT)) { if (onTouchFlag == 0) { onTouchFlag = 1; //关闭LCD背光 setUserLed(1,0);//关闭编码器灯 if (mDevCtrl != null) { //blBrightness = getSystemBrightness(); mDevCtrl.set_backlight_brightness(0);//关闭LCD背光 Intent intent1 = new Intent("android.ido.action.screenoff.now"); intent1.putExtra("timeout",NO_TOUCH_CNT_TIMEOUT); mContext.sendBroadcast(intent1); ts_check_loop_time = TS_CHECK_LOOP_TIME2; } } Log.d(TAG,"====>no touch timeout!!!"); } } mHandler.postDelayed(noTouchCheckRunnable, ts_check_loop_time); } catch (Exception e) { Log.e(TAG, e.toString()); } } }; private int getSystemBrightness() { int systemBrightness = 0; try { systemBrightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); } catch (Exception e) { e.printStackTrace(); } return systemBrightness; } //confirm:ture-会弹出是否关机的确认窗口,false-无弹框,直接关机 private void systemShutdown(boolean confirm) { Intent intent = new Intent("com.android.internal.intent.action.REQUEST_SHUTDOWN"); intent.putExtra(Intent.EXTRA_KEY_CONFIRM, confirm); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); /*PowerManager mPowerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); if (mPowerManager != null) mPowerManager.shutdown(false, "user shutdwon",false);*/ } //confirm:ture-会弹出是否关机的确认窗口,false-无弹框,直接重启 private void systemReboot(boolean confirm) { Intent intent = new Intent("android.intent.action.REBOOT"); intent.putExtra(Intent.EXTRA_KEY_CONFIRM, confirm); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } private void doMasterClear() {//恢复出厂设置 Intent intent = new Intent(Intent.ACTION_FACTORY_RESET); intent.setPackage("android"); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.putExtra(Intent.EXTRA_REASON, "FactoryMode"); intent.putExtra(Intent.EXTRA_WIPE_EXTERNAL_STORAGE, true); intent.putExtra(Intent.EXTRA_WIPE_ESIMS, true); mContext.sendBroadcast(intent); } private void setAirPlaneMode(boolean enable) {//设置开启/关闭飞行模式 if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) { Settings.System.putInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, enable ? 1 : 0); } else { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, enable ? 1 : 0); } Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", enable); mContext.sendBroadcast(intent); } private void silentInstallApk(String path) {//安装的包可以卸载 if(DEBUG) Log.d(TAG, "silentInstallApk start"); if (path == null) { Log.e(TAG,"Apk paht is null!"); return; } if (isApkFile(mContext,path)) { if(DEBUG) Log.d(TAG,"Installing:" + path); try{ InstallUtils.install28(mContext,path,InstallResultReceiver.class); } catch (Exception e) { Log.e(TAG,"silentInstallApk Error:" + e); } } else { Log.e(TAG,path + " is invaild apk!"); } } private void screenshot(String savePath,String id) { Process process = null; BufferedReader successResult = null; BufferedReader errorResult = null; StringBuilder successMsg = new StringBuilder(); StringBuilder errorMsg = new StringBuilder(); try { process = new ProcessBuilder("/system/bin/screencap","-d",id,"-p", savePath).start(); successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); String s; while ((s = successResult.readLine()) != null) { successMsg.append(s); if(DEBUG) Log.d(TAG,"screencap:" + savePath); } while ((s = errorResult.readLine()) != null) { errorMsg.append(s); Log.e(TAG,"screencap:" + savePath+",Error:"+errorMsg.toString()); } } catch (Exception e) { Log.e(TAG,e.toString()); } } public static String getPackage(Context context, String filePath) { PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(filePath, PackageManager.GET_ACTIVITIES); if (info != null) return info.packageName; else return null; } public static void startApkActivity(final Context ctx, String packageName) { PackageManager pm = ctx.getPackageManager(); PackageInfo pi; try { pi = pm.getPackageInfo(packageName, 0); Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setPackage(pi.packageName); List apps = pm.queryIntentActivities(intent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null) { String className = ri.activityInfo.name; intent.setComponent(new ComponentName(packageName, className)); ctx.startActivity(intent); } } catch (Exception ex) { Log.e(TAG, ex.toString()); } } private void setDateAndTime(int year, int month, int day,int hourOfDay, int minute,int second) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); c.set(Calendar.DAY_OF_MONTH, day); c.set(Calendar.HOUR_OF_DAY, hourOfDay); c.set(Calendar.MINUTE, minute); c.set(Calendar.SECOND, second); c.set(Calendar.MILLISECOND, 0); long when = c.getTimeInMillis(); if (when / 1000 < Integer.MAX_VALUE && mAlarmManager != null) { mAlarmManager.setTime(c.getTimeInMillis()); } } private static void setDisableTs(boolean on) { //设置禁止触摸上报数据 final String path = "/dev/dis_ts"; if (new File(path).exists()) { FileWriter writer = null; try { writer = new FileWriter(path); if (on) { writer.write("on "); } else { writer.write("off "); } writer.flush(); } catch (Exception ex) { Log.d(TAG, "" + ex); } finally { if (writer != null) { try { writer.close(); } catch (IOException ex) { } } } } } private static int getTsCnt() {//获取触摸上报的记数,触摸一次变化一个数据 byte[] buff = new byte[3]; int tsCount; final String IDO_TS = "/dev/dis_ts";; if (new File(IDO_TS).exists()) { try { FileInputStream tsDev = new FileInputStream(new File(IDO_TS)); tsDev.read(buff, 0, 3); tsCount = (buff[0] & 0xFF) * 256 + (buff[1] & 0xFF); tsDev.close(); //Log.d(TAG,"Ts Count:" + tsCount); return tsCount; } catch (Exception ex) { Log.d(TAG, "" + ex); return 0; } } return 0; } private static void setInputReport() { //上报1,1坐标为重置休眠计数 final String path = "/dev/dis_ts"; if (new File(path).exists()) { FileWriter writer = null; try { writer = new FileWriter(path); writer.write("inp "); writer.flush(); } catch (Exception ex) { Log.d(TAG, "" + ex); } finally { if (writer != null) { try { writer.close(); } catch (IOException ex) { } } } } } //on=1,LED灯亮 //on=0, LED灯灭 synchronized private static void setUserLed(int id, int on) { String path = "/sys/class/leds/led" + id + "/brightness"; if (new File(path).exists()) { final String filename = path; FileWriter writer = null; try { writer = new FileWriter(filename); if (on == 0) { writer.write("0"); } else { writer.write("1"); } writer.flush(); } catch (Exception ex) { Log.d(TAG, "" + ex); } finally { if (writer != null) { try { writer.close(); } catch (IOException ex) { } } } } } private static void setPowerSleep() { String path = "/sys/power/state"; if (new File(path).exists()) { final String filename = path; FileWriter writer = null; try { writer = new FileWriter(filename); writer.write("mem"); writer.flush(); } catch (Exception ex) { Log.d(TAG, "" + ex); } finally { if (writer != null) { try { writer.close(); } catch (IOException ex) { } } } } } private static Boolean isApkFile(Context context, String filePath) { String pkg; try { PackageManager mPackageManager = context.getPackageManager(); PackageInfo info = mPackageManager.getPackageArchiveInfo(filePath, PackageManager.GET_ACTIVITIES); if (info !=null) { ApplicationInfo appInfo = info.applicationInfo; pkg=appInfo.packageName; } else { pkg=""; } }catch (Exception e) { pkg=""; } return !TextUtils.isEmpty(pkg); } private boolean fileIsExists(String strFile) { try { File f=new File(strFile); if(!f.exists()) { return false; } } catch (Exception e) { return false; } return true; } }