miui 10 9.1.2 开发版,MIX2,测试无效。
按教程查出来,setDefaultDataSubId 是21。
service call isub 21 i32 1/2 都无效。唉。
有网友提示小米测试无效, 正好把手上的小米8测试一下.
classes.dex
, classes2.dex
, classes3.dex
文件, 使用dex2jar工具得到对应的JAR文件 得到信息如下:
static final int TRANSACTION_setDefaultDataSubId = 24
static final int TRANSACTION_setSimPowerStateForSlot = 176
经测试结果如下:
设置默认数据命令: service call isub 24 i32 i
确实无效. 设置SIM卡状态命令service call phone 176 i32 x i32 y
还是可以正常执行的.
猜测
http://ktnr74.blogspot.com/2014/09/calling-android-services-from-adb-shell.html
https://tasker.joaoapps.com/userguide/zh/
https://forum.xda-developers.com/mi-6/how-to/guide-switch-off-individual-sims-tasker-t3748205
https://stackoverflow.com/questions/20227326/where-to-find-info-on-androids-service-call-shell-command
https://gwokshingcheung.blogspot.com/2017/08/taskerwifissr.html
最近买了物联网卡(卡2), 只作为上网使用, 接电话发短信还是使用联通主卡(卡1). 手机虽然双卡双待,
但是只能一个卡设置为4G, 正常情况下, 把卡2设置为4G用来上网, 卡1自动设置为2G/3G接打电话.
由于出租屋内2G/3G基本没信息号, 每次回到住的地方都需要手动把卡1设置主卡(4G). 然后每次出门后再把卡2设置主卡.
大多数都忘记设置, 电话短信也接不到, 这两天有时间研究了一下 Tasker, 实现根据某些条自动切换双卡数据流量.
根据连接到特定的WIFI(住处)来实现双SIM卡数据流量的自动切换, 本文主要目的就是得到下面二行命令:
service call isub 24 i32 1 #24是我们要通过下面步骤查找出来的, 不同的手机数字是不同的, 需要自已查找
service call isub 24 i32 2
# service
Usage: service [-h|-?]
service list
service check SERVICE
service call SERVICE CODE [i32 INT | s16 STR] ...
Options:
i32: Write the integer INT into the send parcel.
s16: Write the UTF-16 string STR into the send parcel.
根据教程我找到了现应的TRANSACTION_setSimPowerStateForSlot = 164
static final int TRANSACTION_setSimPowerStateForSlot = 164;
public void setSimPowerStateForSlot(int slotIndex, int state) throws RemoteException {
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
try {
_data.writeInterfaceToken(Stub.DESCRIPTOR);
_data.writeInt(slotIndex);
_data.writeInt(state);
this.mRemote.transact(164, _data, _reply, 0);
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
}
截图:
命令行解释:
service call phone 164 i32 x i32 y
把卡1关闭
service call phone 164 i32 0 i32 0
把卡2打开
service call phone 164 i32 1 i32 1
通过运行上面命令确实可以打开或关闭SIM, 但这不是我想要的,
我接着又尝试了许多其它方法(数字), 都没有成功,
static final int TRANSACTION_setDataEnabled = 106; //禁用启用数据流量的
static final int TRANSACTION_setPreferredNetworkType = 105; //设置首先网络的
static final int TRANSACTION_setDataActivationState = 60;
.....
然后开始查看其它服务:ISms, IMms,..., 当我看到ISub中的static final int TRANSACTION_setDefaultDataSubId = 24;
时, 感觉就是它了,
字面意思就是: 设置默认数据流量, 和手机上设置名称相对应, 不过直接测试并没有效果, (可能其它尝试把系统变量改乱了, 重启后可以了),
又查询了subId参数(并没有查到), 不过多次测试知道了: 卡1 为 1, 卡2 为2, 索引从1开始,(并不保证正确, 仅测试得出, 如果错误请指出)
public void setDefaultDataSubId(int subId) throws RemoteException {
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
try {
_data.writeInterfaceToken(Stub.DESCRIPTOR);
_data.writeInt(subId);
this.mRemote.transact(24, _data, _reply, 0);
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
}
最终得到如下命令:
service call isub 24 i32 x
把卡1 设置为默认数据卡:
service call isub 24 i32 1
把卡2 设置为默认数据卡:
service call isub 24 i32 2
Tasker功能很强大, 网上资料也很多, 不清楚的大家自己GOOGLE
参考设置 : https://gwokshingcheung.blogspot.com/2017/08/taskerwifissr.html
关于这方面的资料不是很多, 查了一下中文的很少, 英文资料有一些, 最终结果却不我想要的.
在经过多次尝试后,并成功了, 感觉很棒, 哈哈., (^_~
记录此文, 分享给那些也在尝试这方面知识的同学...
感谢提醒, 已测试最新系统, 确实无效, 已更新Blog.