.NET for AndroidでSIMカードの電話番号を取得する
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}");
}
}