Browse Source

fix: root 截图

master
高志龙 3 months ago
parent
commit
22f75f701c
  1. 2
      app/build.gradle
  2. 20
      app/src/main/java/qianmu/container/mqtt/MQTTService.java
  3. 31
      app/src/main/java/qianmu/container/util/RootCmdUtil.java

2
app/build.gradle

@ -9,7 +9,7 @@ android {
defaultConfig { defaultConfig {
applicationId "qianmu.container" applicationId "qianmu.container"
minSdkVersion 24
minSdkVersion 26
targetSdkVersion 30 targetSdkVersion 30
versionCode 6 versionCode 6
versionName "V2.0.8.20" versionName "V2.0.8.20"

20
app/src/main/java/qianmu/container/mqtt/MQTTService.java

@ -108,6 +108,7 @@ import qianmu.container.util.BitmapUtil;
import qianmu.container.util.DeviceUtil; import qianmu.container.util.DeviceUtil;
import qianmu.container.util.FileUtil; import qianmu.container.util.FileUtil;
import qianmu.container.util.LoggerUtil; import qianmu.container.util.LoggerUtil;
import qianmu.container.util.RootCmdUtil;
import qianmu.container.util.SignWayUtil; import qianmu.container.util.SignWayUtil;
import qianmu.container.util.StringUtil; import qianmu.container.util.StringUtil;
import retrofit2.Call; import retrofit2.Call;
@ -672,6 +673,7 @@ public class MQTTService extends Service {
File file = new File(path); File file = new File(path);
File parent = file.getParentFile(); File parent = file.getParentFile();
if (!parent.exists()) parent.mkdirs(); if (!parent.exists()) parent.mkdirs();
if (file.exists()) file.delete();
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
try { try {
@ -690,6 +692,22 @@ public class MQTTService extends Service {
} }
return false; return false;
}); });
}else if(RootCmdUtil.checkSuCommand()){ //root
LoggerUtil.e("screenShot","root截屏");
screenshotFuture = singleThreadExecutor.submit(() -> {
String[] cmd = new String[]{"su", "-c", "screencap -p " + path};
Process process = Runtime.getRuntime().exec(cmd);
boolean finished = process.waitFor(3, TimeUnit.SECONDS);
if (!finished) {
process.destroyForcibly();
return false;
}
if(new File(path).exists()){
LoggerUtil.e("screenShot","截屏完成");
return true;
}
return false;
});
}else{ }else{
screenshotFuture = singleThreadExecutor.submit(() -> { screenshotFuture = singleThreadExecutor.submit(() -> {
Bitmap screenBitmap = null; Bitmap screenBitmap = null;
@ -725,7 +743,7 @@ public class MQTTService extends Service {
}); });
} }
if (!screenshotFuture.get(12, TimeUnit.SECONDS)) { // 添加超时时间
if (!screenshotFuture.get(10, TimeUnit.SECONDS)) { // 添加超时时间
LoggerUtil.e("screenShot","截屏失败"); LoggerUtil.e("screenShot","截屏失败");
return; return;
} }

31
app/src/main/java/qianmu/container/util/RootCmdUtil.java

@ -1,5 +1,6 @@
package qianmu.container.util; package qianmu.container.util;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.sdkapi.api.SdkApi; import com.sdkapi.api.SdkApi;
@ -7,10 +8,13 @@ import com.sdkapi.common.ApiTool;
import com.sdkapi.common.ResultCallback; import com.sdkapi.common.ResultCallback;
import com.sdkapi.common.ResultInfo; import com.sdkapi.common.ResultInfo;
import java.io.BufferedReader;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader;
import qianmu.container.handler.HdmiStatusCallback; import qianmu.container.handler.HdmiStatusCallback;
@ -83,5 +87,32 @@ public final class RootCmdUtil {
} }
return result; return result;
} }
/**
* 判断 root
* @return
*/
public static boolean checkSuCommand() {
Process process = null;
BufferedReader reader = null;
try {
process = Runtime.getRuntime().exec(new String[]{"su", "-c", "id"});
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String output = reader.readLine();
// 输出包含 uid=0 表示ROOT成功
return !TextUtils.isEmpty(output) && output.contains("uid=0");
} catch (Exception e) {
return false;
} finally {
try {
if (reader != null) reader.close();
if (process != null) process.destroy();
} catch (Exception ignored) {}
}
}
} }

Loading…
Cancel
Save