반응형
내 기기의 전화번호를 불러오는 소스를 갈무리해서 정리한다.
물론 유심이 없으면 전화번호 못불러옴..
public static String getPhoneNum(Activity activity) {
if(requestPermissionsAsPhoneNumber(activity)) { // 권한 체크
String phoneNum = "";
TelephonyManager telManager = (TelephonyManager) activity.getSystemService(TELEPHONY_SERVICE);
phoneNum = telManager.getLine1Number().toString();
// 일부 기기에서 TelephonyManager를 통해 호출하면 호출되지 않는 케이스가 있기에 추가로 확인
if (phoneNum.equals("")) {
SubscriptionManager subscriptionManager = (SubscriptionManager) activity.getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
for (SubscriptionInfo subscriptionInfo : subscriptionManager.getActiveSubscriptionInfoList()) {
// 듀얼유심 기기의 경우 여기서 2개의 번호가 나올 수 있다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
phoneNum = subscriptionManager.getPhoneNumber(subscriptionInfo.getSubscriptionId());
} else {
phoneNum = subscriptionInfo.getNumber();
}
}
}
if (phoneNum == null) {
return "";
}
return phoneNum;
}
return "";
}
public static boolean requestPermissionsAsPhoneNumber(Activity activity) {
String[] requirePermissions = new String[1];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
requirePermissions[0] = Manifest.permission.READ_PHONE_NUMBERS;
} else {
requirePermissions[0] = Manifest.permission.READ_PHONE_STATE;
}
if (ActivityCompat.checkSelfPermission(activity, requirePermissions[0]) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, requirePermissions, 1);
return false;
}
return true;
}
getLine1Number() 함수가 Android SDK 33 부터 deprecated 된거 같은데 아직 잘 되긴 함.....
특정 기기에서 간혹 번호를 못불러오는 현상이 있어서 SubscriptionManager도 같이 사용했음.
반응형