Commit 5682062d authored by Administrator's avatar Administrator

fix: 远程重播命令

parent c99362bb
......@@ -56,7 +56,7 @@ dependencies {
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
// implementation 'org.apache.commons:commons-lang3:3.6'
// implementation 'commons-io:commons-io:2.6'
implementation "com.virjar.majora:majora-sdk:1.1"
implementation "com.virjar.majora:majora-sdk:1.2"
implementation 'eu.chainfire:libsuperuser:1.0.0.201608240809'
......
......@@ -8,14 +8,42 @@ import com.virjar.majora.adr.utils.ClientIdentifier;
import com.virjar.majora.adr.utils.CommonUtils;
import com.virjar.majora.adr.utils.PermissionUtils;
import com.virjar.majora.client.sdk.client.MajoraClient;
import com.virjar.majora.client.sdk.cmd.handlers.RedialHandler;
import com.virjar.majora.client.sdk.log.MajoraLogger;
import java.util.Map;
import eu.chainfire.libsuperuser.Shell;
public class MajoraClientService {
private static boolean started = false;
private static MajoraClient majoraClient;
private static class RemoteRedialOperator implements RedialHandler.RedialOperator {
@Override
public String envOk() {
if (!Shell.SU.available()) {
// 没有root权限,那就无法进行飞行模式切换
return "redial need rot permission";
}
return null;
}
@Override
public void doRedial(Map<String, String> param) {
String offlineWaitMilisStr = param.get("offlineWaitMilis");
int offlineWaitMilis = 0;
if (offlineWaitMilisStr != null) {
try {
offlineWaitMilis = Integer.parseInt(offlineWaitMilisStr);
} catch (NumberFormatException ignore) {
}
}
reDial(offlineWaitMilis);
}
}
// 重播任务定时器
private static class RedialThread extends Thread {
private static final RedialThread mInstance = new RedialThread();
......@@ -42,7 +70,7 @@ public class MajoraClientService {
return;
}
if (autoRedial) {
reDial();
reDial(2000);
}
}
}
......@@ -67,25 +95,41 @@ public class MajoraClientService {
}
public static void reDial() {
public static void reDial(int offlineWaitMilis) {
if (!Shell.SU.available()) {
// 没有root权限,那就无法进行飞行模式切换
return;
}
if (offlineWaitMilis > 20_000) {
offlineWaitMilis = 20_000;
}
if (majoraClient == null) {
reDialInternal();
reDialImpl();
} else {
majoraClient.prepareReDial(MajoraClientService::reDialInternal);
int finalOfflineWaitMilis = offlineWaitMilis;
majoraClient.prepareReDial(() -> new Thread("redial-thread") {
@Override
public void run() {
if (finalOfflineWaitMilis > 0) {
try {
// 重播的时候,先摘除流量,等待一秒的时间
Thread.sleep(finalOfflineWaitMilis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
reDialImpl();
}
}.start());
}
}
private static void reDialInternal() {
private static void reDialImpl() {
try {
Shell.SU.run("settings put global airplane_mode_on 1 && am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true");
Thread.sleep(5000);
Shell.SU.run("settings put global airplane_mode_on 0 && am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false");
} catch (Exception e) {
MajoraLogger.getLogger().info("reDial error", e);
}
......@@ -97,6 +141,9 @@ public class MajoraClientService {
int serverPort = CommonUtils.toInt(spf.getString("server_port", "5879"), 5879);
majoraClient = new MajoraClient(serverHost, serverPort, ClientIdentifier.id());
majoraClient.setDeviceAccount(spf.getString("account_identifier", ""));
RedialHandler.setRedialOperator(new RemoteRedialOperator());
UILoggerHelper.setupLogger();
}
}
......@@ -62,7 +62,7 @@ public class MainPanelFragment extends Fragment {
Button btnReDial = view.findViewById(R.id.btn_redial);
btnReDial.setOnClickListener(view1 -> {
if (Shell.SU.available()) {
MajoraClientService.reDial();
MajoraClientService.reDial(1000);
} else {
Toast.makeText(getActivity(), "重播需要root权限", Toast.LENGTH_SHORT).show();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment