.NET for AndroidでSIMカードの電話番号を取得する

2024年10月22日 (火) 03:12時点におけるAdministrator (トーク | 投稿記録)による版 (ページの作成:「== Android 6以降 == Android 6.0 (API Level 23)以降で電話番号を取得するには以下の権限が必要です。 * android.permission.READ_PHONE_STATE == Android 13以降 == Android 13 (API Level 33)以降で電話番号を取得するにはREAD_PHONE_STATEに加えて以下の権限が必要になりました。 * android.permission.READ_PHONE_NUMBERS * android.permission.READ_PRIVILEGED_PHONE_STATE また、従来の方法では空文字が返って…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

Android 6以降 編集

Android 6.0 (API Level 23)以降で電話番号を取得するには以下の権限が必要です。

  • android.permission.READ_PHONE_STATE

Android 13以降 編集

Android 13 (API Level 33)以降で電話番号を取得するにはREAD_PHONE_STATEに加えて以下の権限が必要になりました。

  • android.permission.READ_PHONE_NUMBERS
  • android.permission.READ_PRIVILEGED_PHONE_STATE

また、従来の方法では空文字が返ってくるようになりましたので確実にソースコード内で処理を分岐する必要があります。

大雑把なコード 編集

var subscriptionManager = SubscriptionManager.From(Android.App.Application.Context);

// SIMスロット数でループ
for (int simSlotIndex = 0; simSlotIndex < simSlotCount; simSlotIndex++)
{
    // SIMカードの情報を取得
    var subscriptionInfo = subscriptionManager.GetActiveSubscriptionInfoForSimSlotIndex(simSlotIndex);
    if (subscriptionInfo != null);
    {
        var phoneNumber = "";

        if (Android.OS.BuildVersionCodes.Tiramisu <= Android.OS.Build.VERSION.SdkInt)
        {
            phoneNumber = subscriptionManager.GetPhoneNumber(subscriptionInfo.SubscriptionId);
        }
        else if (Android.OS.BuildVersionCodes.M <= Android.OS.Build.VERSION.SdkInt)
        {// API Level 23 (Android 6.0) 以上
            phoneNumber = subscriptionInfo.Number;
        }
        else 
        {// もう存在しないだろ
            throw new NotSupportedException();
        }

        Console.WriteLine($"sim {simSlotIndex} = {phoneNumber}");
    }
}