flutter中如何获取设备ICCID?

问题描述 投票:0回答:1

如何在flutter中获取手机内SIM卡的ICCID号?是否有任何包可以用来检索相同的内容?我找了一下,但找到的包裹只能得到号码,但不能得到 ICCID 号码。

flutter
1个回答
0
投票

嗨,我认为没有一个包可以使用 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
  }
}

希望它有效!!!! 快乐编码

© www.soinside.com 2019 - 2024. All rights reserved.