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 {
applicationId "qianmu.container"
minSdkVersion 24
minSdkVersion 26
targetSdkVersion 30
versionCode 6
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.FileUtil;
import qianmu.container.util.LoggerUtil;
import qianmu.container.util.RootCmdUtil;
import qianmu.container.util.SignWayUtil;
import qianmu.container.util.StringUtil;
import retrofit2.Call;
@ -672,6 +673,7 @@ public class MQTTService extends Service {
File file = new File(path);
File parent = file.getParentFile();
if (!parent.exists()) parent.mkdirs();
if (file.exists()) file.delete();
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
try {
@ -690,6 +692,22 @@ public class MQTTService extends Service {
}
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{
screenshotFuture = singleThreadExecutor.submit(() -> {
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","截屏失败");
return;
}

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

@ -1,5 +1,6 @@
package qianmu.container.util;
import android.text.TextUtils;
import android.util.Log;
import com.sdkapi.api.SdkApi;
@ -7,10 +8,13 @@ import com.sdkapi.common.ApiTool;
import com.sdkapi.common.ResultCallback;
import com.sdkapi.common.ResultInfo;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import qianmu.container.handler.HdmiStatusCallback;
@ -83,5 +87,32 @@ public final class RootCmdUtil {
}
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