优化simcard切换

hdrplus
Matthew 1 year ago
parent d5af711c74
commit 6d036c9fd9

@ -12,6 +12,8 @@
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission <uses-permission
android:name="android.permission.TETHER_PRIVILEGED" android:name="android.permission.TETHER_PRIVILEGED"

@ -126,15 +126,16 @@ public class AppMaster {
public void run() { public void run() {
final boolean separateNetwork = mService.isSeparateNetwork(); final boolean separateNetwork = mService.isSeparateNetwork();
boolean simcardSwitched = false;
if (separateNetwork) { if (separateNetwork) {
try { try {
ConnectivityManager connectivityManager = (ConnectivityManager) mService.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connectivityManager = (ConnectivityManager) mService.getSystemService(Context.CONNECTIVITY_SERVICE);
Network previousNetwork = connectivityManager.getActiveNetwork(); Network previousNetwork = connectivityManager.getActiveNetwork();
String previousNetworkStr = previousNetwork.toString(); String previousNetworkStr = previousNetwork == null ? "" : previousNetwork.toString();
mService.logger.info("Switch to Simcard 2"); mService.selectSimCard(2);
SysApi.selectSimCard4Data(mService.getApplicationContext(), 2); simcardSwitched = true;
sleep(100); sleep(100);
boolean connected = false; boolean connected = false;
@ -155,9 +156,8 @@ public class AppMaster {
ex.printStackTrace(); ex.printStackTrace();
} finally { } finally {
try { try {
if (!mService.isMntnMode()) { if (simcardSwitched && !mService.isMntnMode()) {
mService.logger.info("Switch to Simcard 1"); mService.selectSimCard(1);
SysApi.selectSimCard4Data(mService.getApplicationContext(), 1);
} }
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
@ -167,9 +167,8 @@ public class AppMaster {
ex.printStackTrace(); ex.printStackTrace();
} finally { } finally {
try { try {
if (!mService.isMntnMode()) { if (simcardSwitched && !mService.isMntnMode()) {
mService.logger.info("Switch to Simcard 1"); mService.selectSimCard(1);
SysApi.selectSimCard4Data(mService.getApplicationContext(), 1);
} }
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();

@ -106,6 +106,13 @@ public class MainActivity extends AppCompatActivity {
} }
}); });
findViewById(R.id.btnRestartMpAPP).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MicroPhotoContext.restartMpApp(getApplicationContext());
}
});
/* /*
findViewById(R.id.btnTurn485On).setOnClickListener(new View.OnClickListener() { findViewById(R.id.btnTurn485On).setOnClickListener(new View.OnClickListener() {
@Override @Override

@ -41,6 +41,7 @@ import com.xypower.mpmaster.sms.SmsSendReceiver;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File; import java.io.File;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -911,8 +912,53 @@ public class MpMasterService extends Service {
} }
public void selectSimCard(int num) { public void selectSimCard(int num) {
logger.warning("Select SimCard: " + Integer.toString(num)); logger.info("Try to Switch To SimCard: " + Integer.toString(num));
SysApi.selectSimCard4Data(getApplicationContext(), num);
Context context = getApplicationContext();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int activeSubId = SubscriptionManager.getActiveDataSubscriptionId();
int activeSlotIdx = SubscriptionManager.getSlotIndex(activeSubId);
if (activeSlotIdx == (num - 1)) {
logger.info("Active SimCard is already " + Integer.toString(num));
} else {
int subIds[] = subscriptionManager.getSubscriptionIds(num - 1);
if (subIds != null && subIds.length > 0) {
setDefaultDataSubId(subIds[0]);
logger.info("Switched To SimCard: " + Integer.toString(num));
}
}
} else {
SysApi.selectSimCard4Data(context, num);
}
}
private void setDefaultDataSubId(int subId) {
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
try {
Method method = subscriptionManager.getClass().getDeclaredMethod("setDefaultDataSubId", int.class);
method.invoke(subscriptionManager, subId);
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.setDataEnabled(true);
Method method1 = telephonyManager.getClass().getDeclaredMethod("setDataEnabled", boolean.class);
method1.invoke(telephonyManager, true);
} catch (Exception e) {
// Log.e(TAG, "wjz debug setDefaultDataSubId: error is " + e.getMessage());
e.printStackTrace();
}
}
private int getDefaultDataSubId() {
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
try {
Method method = subscriptionManager.getClass().getDeclaredMethod("getDefaultDataSubscriptionId");
return (int) method.invoke(subscriptionManager);
} catch (Exception e) {
Log.e(TAG, "wjz debug getDefaultDataSubId: error is " + e.getMessage());
}
return 0;
} }
public native static int getInt(int cmd); public native static int getInt(int cmd);

@ -113,4 +113,13 @@
app:layout_constraintStart_toEndOf="@+id/sendsms" app:layout_constraintStart_toEndOf="@+id/sendsms"
app:layout_constraintTop_toTopOf="@+id/sendsms" /> app:layout_constraintTop_toTopOf="@+id/sendsms" />
<Button
android:id="@+id/btnRestartMpAPP"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="重启I1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sendsms" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save