如何在flutter中获取手机内SIM卡的ICCID号?是否有任何包可以用来检索相同的内容?我找了一下,但找到的包裹只能得到号码,但不能得到 ICCID 号码。
嗨,我认为没有一个包可以使用 flutter 获取 ICCID 号码,但您可以使用包含一些本机代码的自定义代码来获得相同的结果
这是飞镖代码:
import 'dart:async';
import 'package:flutter/services.dart';
class SimInfo {
static const MethodChannel _channel = const MethodChannel('sim_info');
static Future<String> getIccid() async {
try {
final String iccid = await _channel.invokeMethod('getIccid');
return iccid;
} on PlatformException catch (e) {
print("Failed to get ICCID: '${e.message}'.");
return null;
}
}
}
Android 原生代码:
import android.content.Context;
import android.telephony.TelephonyManager;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
public class SimInfoPlugin implements FlutterPlugin, MethodCallHandler {
private Context applicationContext;
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
applicationContext = flutterPluginBinding.getApplicationContext();
final MethodChannel channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "sim_info");
channel.setMethodCallHandler(this);
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("getIccid")) {
result.success(getIccid());
} else {
result.notImplemented();
}
}
private String getIccid() {
TelephonyManager telephonyManager = (TelephonyManager) applicationContext.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager != null) {
return telephonyManager.getSimSerialNumber();
}
return null;
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
}
}
Swfit(ios)代码:
import Flutter
import UIKit
public class SwiftSimInfoPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "sim_info", binaryMessenger: registrar.messenger())
let instance = SwiftSimInfoPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
if call.method == "getIccid" {
result(getIccid())
} else {
result(FlutterMethodNotImplemented)
}
}
private func getIccid() -> String? {
let telephonyInfo = CTTelephonyNetworkInfo()
if let carrier = telephonyInfo.subscriberCellularProvider {
return carrier.iccAuthenticationKey
}
return nil
}
}
希望它有效!!!! 快乐编码