使用 mobile_number 包检测多个 SIM 卡,但在少数 Android 中只能检测到 1 张 SIM 卡,而在少数 Android 中甚至无法检测到 1 张 SIM 卡,并且还需要帮助来检测哪张 SIM 卡是 SIM1 或 SIM2
@override
void onInit() {
dbtIdController.value.addListener(dbtFormValid);
if (Platform.isAndroid) {
MobileNumber.listenPhonePermission((isPermissionGranted) {
if (isPermissionGranted) {
initMobileNumberState();
}
});
initMobileNumberState();
}
super.onInit();
}
Future<void> initMobileNumberState() async {
if (!await MobileNumber.hasPhonePermission) {
await MobileNumber.requestPhonePermission;
return;
}
List<SimCard> simCards = [];
try {
(await MobileNumber.mobileNumber)!;
List<SimCard> simCardList = (await MobileNumber.getSimCards)!;
simCards = simCardList;
availableMobileNumbers.clear();
for (var simCard in simCards) {
String mobileNumber = simCard.number ?? 'N/A';
availableMobileNumbers.add(mobileNumber);
}
} on PlatformException catch (e) {
debugPrint('Failed to get SIM cards because of ${e.message}');
}
}
一直面临这个问题,我们需要为更高和更低的 android sdks 实现两种方式的方案,以从长远来看解决这个问题
// For newer SDKs, use SubscriptionManager, for older, use TelephonyManager directly
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
// Use SubscriptionManager APIs for newer versions
} else {
// Use TelephonyManager.getSimSerialNumber(), etc. for older versions
}
return simCardNumbers;
}
}