[flutter] device_info 라이브러리를 사용하여 디바이스의 SIM 카드 연결 상태 알아내기

이번 글에서는 기기의 SIM 카드 연결 상태를 확인하기 위해 device_info 라이브러리를 사용하는 방법에 대해 알아보겠습니다. Flutter 프로젝트에서는 이 라이브러리를 통해 기기의 정보(모델명, 제조사, 버전 등)를 가져올 수 있습니다.

device_info 라이브러리 설치

먼저, device_info 라이브러리를 설치해야 합니다. pubspec.yaml 파일에 다음과 같이 의존성을 추가합니다:

dependencies:
  device_info: ^2.0.0

위의 코드에서 2.0.0device_info 라이브러리의 최신 버전을 의미합니다. 본인의 프로젝트에 맞는 버전을 선택하여 사용하시면 됩니다. 그리고 의존성을 추가한 뒤에는 flutter pub get 명령어를 실행하여 의존성을 설치합니다.

device_info 라이브러리 사용

device_info 라이브러리를 사용하려면, 다음과 같이 import를 해주어야 합니다:

import 'package:device_info/device_info.dart';

이제 해당 기기의 정보를 가져오기 위해 DeviceInfoPlugin을 초기화합니다. 그리고 AndroidDeviceInfo 또는 IosDeviceInfo 객체를 가져올 수 있습니다.

DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;

SIM 카드 연결 상태를 확인하기 위해서는 androidInfoiosInfo 객체를 사용하면 됩니다. 각 플랫폼에서 다음과 같이 확인할 수 있습니다:

Android:

bool isSimCardConnected = androidInfo.isPhysicalDevice &&
    (androidInfo.simState == SimCardState.READY ||
        androidInfo.simState == SimCardState.UNKNOWN);

iOS:

bool isSimCardConnected = iosInfo.isPhysicalDevice &&
    (iosInfo.batteryLevel != -1.0);

위의 코드에서 isPhysicalDevice는 실제 기기인지 여부를 확인하는 데 사용되는 속성입니다. batteryLevel은 -1.0 이상인 경우에는 배터리가 연결되어 있다고 가정합니다.

이제 isSimCardConnected 변수를 확인하여 SIM 카드의 연결 상태를 알 수 있습니다. true이면 SIM 카드가 연결되어 있음을 의미하고, false이면 SIM 카드가 연결되어 있지 않음을 의미합니다.

예외 처리

device_info 라이브러리는 iOS 시뮬레이터에서 작동하지 않습니다. 실제 기기에서만 사용해야 합니다. 따라서 예외 처리를 추가하여 시뮬레이터에서는 false 값을 반환하도록 해야 합니다.

if (!kIsWeb && (Platform.isIOS || Platform.isAndroid)) {
  bool isSimCardConnected = false;
  
  // 코드 작성
} else {
  bool isSimCardConnected = false;
}

위의 코드에서 kIsWeb은 웹 플랫폼인지 여부를 확인하는 플래그입니다. 이를 사용하여 예외 처리를 추가하고, 시뮬레이터에서는 false 값을 반환하도록 합니다.

결론

이제 device_info 라이브러리를 사용하여 Flutter 앱에서 기기의 SIM 카드 연결 상태를 알아낼 수 있습니다. 이를 통해 앱의 기능을 조건부로 제어하거나 사용자에게 적절한 안내 메시지를 제공할 수 있습니다.

더 자세한 내용은 device_info 라이브러리의 공식 문서를 참조하십시오.