느려요

진짜로

IT/Mobile

[Android/JAVA] 내 스마트폰 전화번호 조회하기

느이 2024. 1. 25. 15:55

내 기기의 전화번호를 불러오는 소스를 갈무리해서 정리한다.

 

물론 유심이 없으면 전화번호 못불러옴..

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도 같이 사용했음.

반응형