我有一个小米Mi6,它支持两个SIM卡 . 我需要弄清楚如何使用Tasker在工作时间之外关闭第二个SIM(SIM2) .
我已经找到了如何使用Tasker打开SIM2的设置页面:
Action: android.intent.action.MAIN
Cat: Launcher
Extra 1: subscription_id:1
Extra 2: slot_id:1
Package: com.android.phone
Class: com.android.phone.settings.MultiSimInfoEditorActivity
Target: Activity
它会调出settings page for SIM2, like so.但是,我无法弄清楚如何打开或关闭SIM卡 .
为了找到有用的东西,我已经反编译了com.android.phone(TeleService.apk),但是我不知道从哪里开始 . 我知道SO _1672932已经有一个Java解决方案,但我不知道它是否有效或如何使其适应Tasker .
可以找到反编译的MultiSimInfoEditorActivity here . 我还了解了SIM卡关闭再打开时发生的情况 .
我非常感谢任何帮助!
1 回答
我只用我的Mi6运行MIUI v9,Android build 8.0.0测试了它 . It requires root.
在研究了SO solution linked above in my question后,我注意到代码正在检索特定电话功能的索引号,然后它将用于运行命令来关闭移动数据 . 使用这个,我找到了一种实际关闭SIM卡的方法 .
谷歌生成的this page from Haotian Deng显示了服务调用函数的这些索引列在ITelephony.aidl文件中 . 这些是Java代码提取的内容 . 这些都不适用于Mi6,但链接到解释服务调用命令的this page:
有了这个,我发现索引列在设备'framework.jar中的com.android.internal.telephony.ITelephony中 .
因此,要从设备中获取所需的索引,您需要从命令提示符运行以下命令:
从here下载jadx
ADB拉设备framework.jar(adb pull /system/framework/framework.jar)
用7-Zip打开.jar文件并解压缩* .dex文件 .
用jadx-gui打开每个.dex文件,直到找到包含以下树的文件:com.android.internal.telephony.ITelephony
搜索项目TRANSACTION_setSimPowerStateForSlot . 注意它后面的= x;这是索引号 .
现在您有了索引号,您可以在adb shell(或Tasker,带有"run shell"函数)中测试以下命令 . You will need to "su" in shell, or set Tasker to "Use Root" .
当然,现在您可以在Tasker中执行它,现在可以在特定时间关闭SIM卡 .
我已经确认它确实关闭了SIM(在执行此命令后立即直接拨打语音邮件),但我不确定这个交换机有什么进一步的影响 .
请享用!