From 66787bb6a7fccec24b8ba118295e2c2e1b4568bf Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Sat, 23 Jul 2022 10:05:30 +0800 Subject: [PATCH] =?UTF-8?q?version:beta=20fix:=20update:=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E7=94=B5=E9=87=8F=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aoleyun/sn/activity/SplashActivity.java | 14 +- .../com/aoleyun/sn/service/GuardService.java | 349 +++++++++++++++++- .../aoleyun/sn/service/main/MainService.java | 63 +++- .../java/com/aoleyun/sn/utils/CmdUtil.java | 42 +++ .../aoleyun/sn/utils/ForegroundAppUtil.java | 1 + 5 files changed, 451 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java b/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java index 054b751..b240148 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java @@ -35,6 +35,7 @@ import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.service.LogcatService; import com.aoleyun.sn.utils.ApkUtils; +import com.aoleyun.sn.utils.CmdUtil; import com.aoleyun.sn.utils.FlowInfo; import com.aoleyun.sn.utils.ForegroundAppUtil; import com.aoleyun.sn.utils.GetFlowUtil; @@ -51,11 +52,21 @@ import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX; import java.io.File; import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; +import io.reactivex.rxjava3.core.ObservableOnSubscribe; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.functions.Consumer; +import io.reactivex.rxjava3.schedulers.Schedulers; import okhttp3.internal.Util; @@ -131,8 +142,7 @@ public class SplashActivity extends AppCompatActivity { } private void debugTest() { - -// if (!BuildConfig.DEBUG) return; + // if (!BuildConfig.DEBUG) return; // File file = new File("/system/media/bootanimation2.zip"); // if (file.exists()){ // Log.e(TAG, "debugTest: "+"file.exists" ); diff --git a/app/src/main/java/com/aoleyun/sn/service/GuardService.java b/app/src/main/java/com/aoleyun/sn/service/GuardService.java index c127b87..28570b9 100644 --- a/app/src/main/java/com/aoleyun/sn/service/GuardService.java +++ b/app/src/main/java/com/aoleyun/sn/service/GuardService.java @@ -9,6 +9,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.BatteryManager; import android.os.Build; +import android.os.Environment; import android.os.IBinder; import android.os.SystemClock; import android.provider.Settings; @@ -22,6 +23,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.KeepAliveConnection; +import com.aoleyun.sn.R; import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.PackageNames; @@ -33,9 +35,11 @@ import com.aoleyun.sn.receiver.NewAppReceiver; import com.aoleyun.sn.rlog.LogDBManager; import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.utils.ApkUtils; +import com.aoleyun.sn.utils.CmdUtil; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SPUtils; import com.aoleyun.sn.utils.ServiceAliveUtils; +import com.aoleyun.sn.utils.TimeUtils; import com.aoleyun.sn.utils.ToastUtil; import com.aoleyun.sn.utils.Utils; import com.aoleyun.sn.utils.XAPKUtils; @@ -44,10 +48,16 @@ import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; import com.baidu.location.LocationClient; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import io.reactivex.rxjava3.core.ObservableOnSubscribe; @@ -59,6 +69,33 @@ import retrofit2.Retrofit; import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; +import static android.os.BatteryManager.BATTERY_HEALTH_COLD; +import static android.os.BatteryManager.BATTERY_HEALTH_DEAD; +import static android.os.BatteryManager.BATTERY_HEALTH_GOOD; +import static android.os.BatteryManager.BATTERY_HEALTH_OVERHEAT; +import static android.os.BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE; +import static android.os.BatteryManager.BATTERY_HEALTH_UNKNOWN; +import static android.os.BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE; +import static android.os.BatteryManager.BATTERY_PLUGGED_AC; +import static android.os.BatteryManager.BATTERY_PLUGGED_ANY; +import static android.os.BatteryManager.BATTERY_PLUGGED_USB; +import static android.os.BatteryManager.BATTERY_PLUGGED_WIRELESS; +import static android.os.BatteryManager.BATTERY_STATUS_CHARGING; +import static android.os.BatteryManager.BATTERY_STATUS_DISCHARGING; +import static android.os.BatteryManager.BATTERY_STATUS_FULL; +import static android.os.BatteryManager.BATTERY_STATUS_NOT_CHARGING; +import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN; +import static android.os.BatteryManager.EXTRA_HEALTH; +import static android.os.BatteryManager.EXTRA_LEVEL; +import static android.os.BatteryManager.EXTRA_MAX_CHARGING_CURRENT; +import static android.os.BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE; +import static android.os.BatteryManager.EXTRA_PLUGGED; +import static android.os.BatteryManager.EXTRA_SCALE; +import static android.os.BatteryManager.EXTRA_STATUS; +import static android.os.BatteryManager.EXTRA_TECHNOLOGY; +import static android.os.BatteryManager.EXTRA_TEMPERATURE; +import static android.os.BatteryManager.EXTRA_VOLTAGE; + /** * 守护进程 双进程通讯 @@ -335,8 +372,7 @@ public class GuardService extends Service { /** * @param status - * @param time - * 和锁屏状态无关,记录设备使用时长的 + * @param time 和锁屏状态无关,记录设备使用时长的 */ private void getLockState(String status, String time) { if (JGYUtils.isOfficialVersion()) { @@ -408,11 +444,12 @@ public class GuardService extends Service { if (elec == 50) { start.onstar(SystemClock.elapsedRealtime()); } + writeLog2File("batteryInfo.txt", recordBatteryInfo(intent)); + dumpBatterystats(); } else { if (Intent.ACTION_POWER_CONNECTED.equals(action)) { LogDBManager.getInstance().creatOtherLog(LogDBManager.LOG_EVENT_BATTERY, "开始充电", "electricity: " + JGYUtils.getInstance().getBatteryLevel() + "%"); - } if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) { LogDBManager.getInstance().creatOtherLog(LogDBManager.LOG_EVENT_BATTERY, @@ -426,7 +463,7 @@ public class GuardService extends Service { LogDBManager.getInstance().creatOtherLog(LogDBManager.LOG_EVENT_BATTERY, "电量充足", "electricity: " + JGYUtils.getInstance().getBatteryLevel() + "%"); } - + recordBattery("电量充足\t" + "electricity: " + JGYUtils.getInstance().getBatteryLevel() + "%"); setDefaultUSBStatus(); Log.e(TAG, action); start.onstar(SystemClock.elapsedRealtime()); @@ -434,6 +471,310 @@ public class GuardService extends Service { } } + private void recordBattery(String s) { + Log.e(TAG, "recordBattery: " + writeLog2File("battery.txt", s)); + } + + private void dumpBatterystats() { + Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable { + StringBuffer shellExec = CmdUtil.shellExec(" dumpsys batterystats"); + emitter.onNext(shellExec); + } + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("debugTest", "onSubscribe: "); + } + + @Override + public void onNext(StringBuffer result) { + Log.e("debugTest", "onNext: " + result.toString()); + Log.e("debugTest", "writeLog2File: " + writeLog2File(result)); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("debugTest", "onError: " + e.getMessage()); + + } + + @Override + public void onComplete() { + Log.e("debugTest", "onComplete: "); + } + }); + } + + private static final int DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT = 5000000; + + private String recordBatteryInfo(Intent intent) { + int status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN); + int plugged = intent.getIntExtra(EXTRA_PLUGGED, BATTERY_PLUGGED_ANY); + int level = intent.getIntExtra(EXTRA_LEVEL, 0); + int scale = intent.getIntExtra(EXTRA_SCALE, 0); + int health = intent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN); + + int maxChargingMicroAmp = intent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT, -1); + int maxChargingMicroVolt = intent.getIntExtra(EXTRA_MAX_CHARGING_VOLTAGE, -1); + int batteryVolt = intent.getIntExtra(EXTRA_VOLTAGE, -1); + int temperature = intent.getIntExtra(EXTRA_TEMPERATURE, -1); + String batteryTechnologyDescript = intent.getStringExtra(EXTRA_TECHNOLOGY); + + final int maxChargingMicroWatt; + + if (maxChargingMicroVolt <= 0) { + maxChargingMicroVolt = DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT; + } + if (maxChargingMicroAmp > 0) { + // Calculating muW = muA * muV / (10^6 mu^2 / mu); splitting up the divisor + // to maintain precision equally on both factors. + maxChargingMicroWatt = (maxChargingMicroAmp / 1000) + * (maxChargingMicroVolt / 1000); + } else { + maxChargingMicroWatt = -1; + } + + + String statusStr = getStatus(status); + String healthStr = getHealth(health); + String pluggedStr = getPlugged(plugged); + String levelStr = getLevel(level); + String scaleStr = getLevel(scale); + String temperatureStr = getTemperature(temperature); + String batteryVoltStr = getBatteryVolt(batteryVolt); + String maxChargingMicroAmpStr = getMaxChargingMicroAmp(maxChargingMicroAmp); + String maxChargingMicroVoltStr = getMaxChargingMicroVolt(maxChargingMicroVolt); + + int currentChargingCurrent = getCurrentChargingCurrent(); + String currentChargingCurrentStr = getCurrentChargingCurrentStr(currentChargingCurrent); + int currentChargingVoltage = getCurrentChargingVoltage(); + String currentChargingVoltageStr = getCurrentChargingVoltageStr(currentChargingVoltage); + + + String result = "\n" + getString(R.string.battery_current_level) + levelStr + + "\n" + getString(R.string.battery_current_temperature) + temperatureStr + + "\n" + getString(R.string.battery_current_volt) + batteryVoltStr + + "\n" + getString(R.string.battery_current_charging_current) + currentChargingCurrentStr + + "\n" + getString(R.string.battery_current_charging_voltage) + currentChargingVoltageStr + + "\n" + getString(R.string.battery_status_titls) + statusStr + + "\n" + getString(R.string.battery_plugged_titls) + pluggedStr + + "\n" + getString(R.string.battery_max_charging_current) + maxChargingMicroAmpStr + + "\n" + getString(R.string.battery_max_charging_voltage) + maxChargingMicroVoltStr + + "\n" + getString(R.string.battery_health_titls) + healthStr + + "\n" + getString(R.string.battery_max_level) + scaleStr + + "\n" + getString(R.string.battery_technology_describing) + batteryTechnologyDescript + + "\n充电速度 = " + maxChargingMicroWatt + + "\n"; + return result; + } + + private String getCurrentChargingVoltageStr(int currentChargingVoltage) { + return String.format("%.3f V", currentChargingVoltage / 1000000.0); + } + + private String getCurrentChargingCurrentStr(int currentChargingCurrent) { + return String.format("%.3f A", currentChargingCurrent / 1000.0); + } + + /** + * 当前充电电流 mA + *

+ * adb shell "cat /sys/class/power_supply/battery/BatteryAverageCurrent" + */ + private int getCurrentChargingCurrent() { + int result = 0; + BufferedReader br = null; + try { + String line; + br = new BufferedReader(new FileReader("/sys/class/power_supply/battery/BatteryAverageCurrent")); + if ((line = br.readLine()) != null) { + result = Integer.parseInt(line); + } + + br.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return result; + } + + /** + * 当前充电电压 uV + *

+ * adb shell "cat /sys/class/power_supply/battery/batt_vol" + */ + private int getCurrentChargingVoltage() { + int result = 0; + BufferedReader br = null; + try { + String line; + br = new BufferedReader(new FileReader("/sys/class/power_supply/battery/batt_vol")); + if ((line = br.readLine()) != null) { + result = Integer.parseInt(line); + } + + br.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return result; + } + + private String getMaxChargingMicroVolt(int maxChargingMicroVolt) { + return String.format("%.1f V", maxChargingMicroVolt / 1000000.0); + } + + private String getMaxChargingMicroAmp(int maxChargingMicroAmp) { + return String.format("%.1f A", maxChargingMicroAmp / 1000000.0); + } + + private String getBatteryVolt(int batteryVolt) { + return String.format("%.3f V", batteryVolt / 1000.0); + } + + + private String getTemperature(int temperature) { + return String.format("%.1f ℃", temperature / 10.0); + } + + private String getLevel(int level) { + return String.format("%d %%", level); + } + + private String getPlugged(int plugged) { + String result = getString(R.string.battery_plugged_any); + + switch (plugged) { + case BATTERY_PLUGGED_ANY: + break; + case BATTERY_PLUGGED_AC: + result = getString(R.string.battery_plugged_ac); + break; + case BATTERY_PLUGGED_USB: + result = getString(R.string.battery_plugged_usb); + break; + case BATTERY_PLUGGED_WIRELESS: + result = getString(R.string.battery_plugged_wireless); + break; + } + + return result; + } + + + private String getHealth(int health) { + String result = getString(R.string.battery_health_unknow); + + switch (health) { + case BATTERY_HEALTH_UNKNOWN: + break; + case BATTERY_HEALTH_GOOD: + result = getString(R.string.battery_health_good); + break; + case BATTERY_HEALTH_OVERHEAT: + result = getString(R.string.battery_health_overheat); + break; + case BATTERY_HEALTH_DEAD: + result = getString(R.string.battery_health_dead); + break; + case BATTERY_HEALTH_UNSPECIFIED_FAILURE: + result = getString(R.string.battery_health_unspecified_failure); + break; + case BATTERY_HEALTH_OVER_VOLTAGE: + result = getString(R.string.battery_health_over_voltage); + break; + case BATTERY_HEALTH_COLD: + result = getString(R.string.battery_health_cold); + break; + } + + return result; + } + + + private String getStatus(int status) { + String result = getString(R.string.battery_status_unknown); + + switch (status) { + case BATTERY_STATUS_FULL: + result = getString(R.string.battery_status_full); + break; + case BATTERY_STATUS_NOT_CHARGING: + result = getString(R.string.battery_status_not_charging); + break; + case BATTERY_STATUS_DISCHARGING: + result = getString(R.string.battery_status_discharging); + break; + case BATTERY_STATUS_CHARGING: + result = getString(R.string.battery_status_charging); + break; + case BATTERY_STATUS_UNKNOWN: + break; + } + + return result; + } + + private boolean writeLog2File(StringBuffer stringBuffer) { + String path = Environment.getExternalStorageDirectory() + File.separator + "aoleyun"; + File file = new File(path); + if (!file.exists()) { + file.mkdirs(); + } + try { + FileWriter fw = new FileWriter(path + File.separator + "log.txt", true); + fw.write(TimeUtils.transferLongToDate(System.currentTimeMillis()) + "\n" + stringBuffer.toString() + "\n"); + fw.close(); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + private boolean writeLog2File(String fileName, String string) { + String path = Environment.getExternalStorageDirectory() + File.separator + "aoleyun"; + File file = new File(path); + if (!file.exists()) { + file.mkdirs(); + } + try { + FileWriter fw = new FileWriter(path + File.separator + fileName, true); + fw.write(TimeUtils.transferLongToDate(System.currentTimeMillis()) + "\n" + string + "\n"); + fw.close(); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + private void setDefaultUSBStatus() { String setting_usb = Settings.System.getString(getContentResolver(), "aole_usb_choose"); Log.e("setDefaultUSBStatus", "setting_usb---------" + setting_usb); diff --git a/app/src/main/java/com/aoleyun/sn/service/main/MainService.java b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java index a890a34..8c9fa5e 100644 --- a/app/src/main/java/com/aoleyun/sn/service/main/MainService.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java @@ -19,10 +19,8 @@ import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.os.Binder; import android.os.Build; -import android.os.Debug; import android.os.Handler; import android.os.IBinder; -import android.os.SystemClock; import android.provider.Settings; import android.text.TextUtils; import android.util.DisplayMetrics; @@ -41,9 +39,7 @@ import com.alibaba.fastjson.JSONObject; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.R; import com.aoleyun.sn.activity.checknet.CheckNetActivity; -import com.aoleyun.sn.activity.main.MainAPresenter; import com.aoleyun.sn.activity.main.MainActivity; -import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.bean.PoweroffBean; import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.JGYActions; @@ -278,7 +274,7 @@ public class MainService extends Service implements MainSContact.MainView, Netwo private Start start; - private ObservableOnSubscribe subscribe = new ObservableOnSubscribe() { + private ObservableOnSubscribe timeSubscribe = new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { start = emitter::onNext; @@ -362,12 +358,16 @@ public class MainService extends Service implements MainSContact.MainView, Netwo Log.e(TAG, "onCreate: " + e.getMessage()); } - Observable.create(subscribe) + Observable.create(timeSubscribe) .throttleFirst(1, TimeUnit.MINUTES) .subscribe(timeObserver); + Observable.create(topAppSubscribe) + .throttleFirst(1, TimeUnit.MINUTES) + .subscribe(topAppObserver); Observable.create(timeChangedSubscribe) .throttleFirst(3, TimeUnit.HOURS) .subscribe(timeChangedObserver); + if ((int) SPUtils.get(this, CommonConfig.JGY_FIRST_CONNECT, 0) == 0) { // TODO: 2021/5/26 待底层修改,临时解决办法 Log.e(TAG, "onCreate: " + "Disable All Settings"); @@ -394,7 +394,7 @@ public class MainService extends Service implements MainSContact.MainView, Netwo addShortcut(); timeChangedStart.onstar(System.currentTimeMillis()); setStatusbar(); - setFloatingWindow(this); + setFloatingWindow(); notificationManager = NotificationManagerCompat.from(this); createNotificationChannel(); } @@ -642,7 +642,8 @@ public class MainService extends Service implements MainSContact.MainView, Netwo @Override public void onNext(Long aLong) { - setFloatingWindow(MainService.this); + Log.e("timeChangedSubscribe", "onNext: " + aLong); + setFloatingWindow(); } @Override @@ -691,9 +692,9 @@ public class MainService extends Service implements MainSContact.MainView, Netwo Log.e("TimeChangedReceiver", "onReceive:" + "time tick"); checkShutdownTime(); checkUploadLogTime(); - setFloatingWindow(MainService.this); + setFloatingWindow(); } else if (ACTION_UPDATE.equals(intent.getAction())) { - setFloatingWindow(MainService.this); + setFloatingWindow(); mPresenter.getScreenLockState(); Log.e("TimeChangedReceiver", "onReceive:" + "date update"); } @@ -741,9 +742,47 @@ public class MainService extends Service implements MainSContact.MainView, Netwo } } - synchronized private void setFloatingWindow(Context context) { - ForegroundAppUtil.openTopApp(context); + private interface TopApp { + void open(Long time); + } + + private TopApp mTopApp; + + private ObservableOnSubscribe topAppSubscribe = new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + mTopApp = emitter::onNext; + } + }; + + private Observer topAppObserver = new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e("topAppObserver", "onSubscribe: "); + } + + @Override + public void onNext(Long aLong) { + Log.e("topAppObserver", "onNext: " + aLong); + ForegroundAppUtil.openTopApp(MainService.this); + } + + @Override + public void onError(Throwable e) { + Log.e("topAppObserver", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e("topAppObserver", "onComplete: "); + } + }; + + synchronized private void setFloatingWindow() { + Log.e(TAG, "setFloatingWindow: "); long nowTime = System.currentTimeMillis(); + mTopApp.open(nowTime); +// ForegroundAppUtil.openTopApp(MainService.this); TimeUtils.ContralTime contralTime = TimeUtils.getDefaltContralTime(this); Log.e(TAG, "setFloatingWindow: " + contralTime); Log.e(TAG, "setFloatingWindow: screenlocked: " + screenlocked); diff --git a/app/src/main/java/com/aoleyun/sn/utils/CmdUtil.java b/app/src/main/java/com/aoleyun/sn/utils/CmdUtil.java index dedf52e..726568c 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/CmdUtil.java +++ b/app/src/main/java/com/aoleyun/sn/utils/CmdUtil.java @@ -99,5 +99,47 @@ public class CmdUtil { '}'; } } + + + /** + * 执行 adb 命令 + * + * @param cmd 命令 + * @return + */ + public static StringBuffer shellExec(String cmd) { + Runtime mRuntime = Runtime.getRuntime(); //执行命令的方法 + try { + //Process中封装了返回的结果和执行错误的结果 + Process mProcess = mRuntime.exec(cmd); //加入参数 + //使用BufferReader缓冲各个字符,实现高效读取 + //InputStreamReader将执行命令后得到的字节流数据转化为字符流 + //mProcess.getInputStream()获取命令执行后的的字节流结果 + BufferedReader mReader = new BufferedReader(new InputStreamReader(mProcess.getInputStream())); + //实例化一个字符缓冲区 + StringBuffer mRespBuff = new StringBuffer(); + //实例化并初始化一个大小为1024的字符缓冲区,char类型 + char[] buff = new char[1024]; + int ch = 0; + //read()方法读取内容到buff缓冲区中,大小为buff的大小,返回一个整型值,即内容的长度 + //如果长度不为null + while ((ch = mReader.read(buff)) != -1) { + //就将缓冲区buff的内容填进字符缓冲区 + mRespBuff.append(buff, 0, ch); + } + //结束缓冲 + mReader.close(); + Log.i("shell", "shellExec: " + mRespBuff); + //弹出结果 +// Log.i("shell", "执行命令: " + cmd + "执行成功"); + return mRespBuff; + + } catch (IOException e) { + // 异常处理 + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } } diff --git a/app/src/main/java/com/aoleyun/sn/utils/ForegroundAppUtil.java b/app/src/main/java/com/aoleyun/sn/utils/ForegroundAppUtil.java index 1d46669..d46e528 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/ForegroundAppUtil.java +++ b/app/src/main/java/com/aoleyun/sn/utils/ForegroundAppUtil.java @@ -31,6 +31,7 @@ public class ForegroundAppUtil { } public static void openTopApp(Context context) { + Log.e(TAG, "openTopApp: " + System.currentTimeMillis()); String topAppName = Settings.Global.getString(context.getContentResolver(), ForegroundAppUtil.TOPAPP_KEY); if (TextUtils.isEmpty(topAppName)) { return;