如下所示 - TelephonyManager仅提供SIM1的详细信息?
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.isNetworkRoaming()
答案 0 :(得分:6)
在API22之前
我相信在API 22之前,Android最初不支持双SIM卡。因此,每个移动供应商都应该有自己的实现。
也许,你应该获得他们的API / SDK并将它们包含在你的项目中。只有这样,您才能访问其API并参考SIM2状态。
即便如此,您还需要处理每个供应商代码,因为可能每个供应商(三星/ LG /摩托罗拉)都可能使用不同的方法来实现这一目标。因此,您可以期待不同的方法名称。
这个问题可能会对您有所帮助:https://stackoverflow.com/a/17499889/4860513
它处理IMEI号码,也许你可以改变它以获得漫游状态。
从API22开始
从API22开始,我认为您可以使用SubscriptionManager
SubscriptionManager subManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
subManager.isNetworkRoaming(int SUBID);
但是,我不确定哪个是SUBID的初始值(不确定它是从0还是1开始)。
我测试过,对于SIM1,我必须使用“1”。对于SIM2,我必须使用“2”。
我认为最好的方法是从SubscriptionManager中检索SUBID。
所以,我认为您可以尝试以下代码:
SubscriptionManager subManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
List<SubscriptionInfo> subInfoList = subManager.getActiveSubscriptionInfoList();
for(int i = 0; i < subInfoList.size(); i++ ) {
int subID = subInfoList.get(i).getSubscriptionId();
int simPosition = subInfoList.get(i).getSimSlotIndex();
if(subManager.isNetworkRoaming(subID))
Log.d("TEST", "Simcard in slot " + simPosition + " has subID == " + subID + " and it is in ROAMING");
else
Log.d("TEST", "Simcard in slot " + simPosition + " has subID == " + subID + " and it is HOME");
}
此代码需要以下权限才能工作:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />