Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android DualSim, ways/task/api to turn off second sim every day at same hour [closed]

Im using my phone for personal/work lines using dualsim (right now Xiaomi Mi5) with Android 7. Im looking for a way to use my work line (2nd sim) to gets turned on at 6am and gets off at 22.00 pm from Monday to Friday.

After looking for some apps, api in android to make it myself, could find the way to achieve it.

Thanks

like image 893
KashMalaga Avatar asked Apr 13 '17 08:04

KashMalaga


1 Answers

Software Solution

There is an App called Dual SIM Control that can manage the data and is compatible with Tasker however it costs 1.20 Euros. You can try the functionality in a free version (App no longer available). It claims to work without root but I don't know how it works.

Solution with Root

I researched a bit and found the following to turn off the data of one sim card in a dual sim phone with a SDK Version higher then 22:

Author: https://stackoverflow.com/users/463053/chuongpham

public static void setMobileNetworkfromLollipop(Context context) throws Exception {
    String transactionCode = getTransactionCode(context);
    String command = null;
    SubscriptionManager mSubscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    // Loop through the subscription list i.e. SIM list.
    for (int i = 0; i < mSubscriptionManager.getActiveSubscriptionInfoCountMax(); i++) {
        if (transactionCode != null && transactionCode.length() > 0) {
            // Get the active subscription ID for a given SIM card.
            int subscriptionId = mSubscriptionManager.getActiveSubscriptionInfoList().get(i).getSubscriptionId();
            // Execute the command via `su` to turn off
            // mobile network for a subscription service.
            command = "service call phone " + transactionCode + " i32 " + subscriptionId + " i32 " + Settings.Global.getInt(context.getContentResolver(), "mobile_data", 0);
            executeCommandViaSu(context, "-c", command);
        }
    }
}

and

private static void executeCommandViaSu(Context context, String option, String command) {
    boolean success = false;
    String su = "su";
    for (int i=0; i < 3; i++) {
        // Default "su" command executed successfully, then quit.
        if (success) {
            break;
        }
        // Else, execute other "su" commands.
        if (i == 1) {
            su = "/system/xbin/su";
        } else if (i == 2) {
            su = "/system/bin/su";
        }
        try {
            // Execute command as "su".
            Runtime.getRuntime().exec(new String[]{su, option, command});
        } catch (IOException e) {
            success = false;
            // Oops! Cannot execute `su` for some reason.
            // Log error here.
        } finally {
            success = true;
        }
    }
}
like image 102
Noah Mühl Avatar answered Sep 30 '22 21:09

Noah Mühl