프로그래밍 방식으로 Android 전화의 전화 번호를 얻습니다.


443

내 안드로이드 앱을 실행하는 기기의 전화 번호를 프로그래밍 방식으로 얻으려면 어떻게해야합니까?


본인이 직접 입력 한 경우를 제외하고는 불가능합니다. 전화 번호는 모바일이나 SIM, 네트워크에서만 알 수 없습니다.
tomsoft

3
@tomsoft 생각해보십시오 ... Facebook과 같은 앱은 자동으로 전화 번호를 어떻게 확인합니까?
Eddie Hart

1
@tomsoft 아니요, 대부분 전화 번호를 요구하지 않거나 전화를 걸 경우 상자가 미리 채워져 있습니다.
Eddie Hart

1
@tomsoft 글쎄, 나는 다른 날 페이스 북에 가입했고, 나에게 코드를 문자로 보낼 때 내 번호를 묻지 않았다. 시도 해봐. ;)
Eddie Hart

1
@EddieHart 또한 전화를 걸고 전화 번호를 물었습니다. 이것은 일반적으로 확인하므로,이 액세스 할 수없는 일부 사업자는 설정에이 정보를 추가 할 수 있습니다하지만이 아닌 표준 기능을 GMS
tomsoft

답변:


484

암호:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

필요한 권한 :

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

주의 사항 :

높게 평가 된 의견에 따르면, 알아야 할 몇 가지주의 사항이 있습니다. 이것은 반환 할 수 있습니다 null또는 ""심지어 "???????", 그것은 더 이상 유효하지 오래된 전화 번호를 반환 할 수 있습니다. 장치를 고유하게 식별하는 것을 원한다면 getDeviceId()대신 사용해야 합니다.


150
실제로는 완벽하지 않습니다. 마지막 으로이 방법을 시도했을 때 이전 휴대 전화 번호가 이전되기 전에 내 전화 번호가 원래 전화 번호로보고되었습니다. 설정 앱이 여전히 해당 기능 부족 번호를 표시하므로 여전히 작동합니다. 또한 일부 SIM으로 인해이 메서드가 반환된다는보고가 있습니다 null. 나는 더 나은 대답을 모른다.
CommonsWare

4
마크가 맞아 전화를 고유하게 식별하는 것을 사용하려는 경우 getDeviceId ()를 사용하여 GSM에 대한 IMEA를 반환합니다.
Alex Volovoy

15
(제 생각에 IMEI ...?)
ChaimKut

23
글쎄, 난 안드로이드 OS 2.2 넥서스 원에 그것을 테스트는 널 (null)을 반환
오마르 레흐만을

43
개발자는 투표 수를 고려하여 이것이 정답이라고 생각할 수 있습니다. 이 방법으로 전화 번호를 항상 알려주지는 않는다는 것을 개발자에게 알리기 위해 메모를 추가해야합니다.
Habeeb Perwad

151

전화 번호가 모든 SIM 카드에 물리적으로 저장되거나 네트워크에서 전화로 브로드 캐스트되지 않기 때문에이 문제에 대한 해결책은 보장되지 않습니다. 이것은 물리적 주소 확인이 필요한 일부 국가에서 특히 그렇습니다. 이후에 번호 할당이 이루어집니다. 전화 번호 할당은 네트워크에서 이루어지며 SIM 카드 나 장치를 변경하지 않고도 변경할 수 있습니다 (예 : 포팅이 지원되는 방식).

나는 그것이 고통이라는 것을 알고 있지만, 가장 좋은 해결책은 사용자에게 전화 번호를 한 번 입력하여 저장하도록 요청하는 것입니다.


18
가져온 번호를 확인하기 위해 "android.provider.Telephony.SMS_RECEIVED"에 리스너를 넣어 SMS (코드 포함)를 번호로 보내고 응답을 제어 할 수 있습니다. 방법 당신은 숫자가 정확하고 작동하는지 확인 할 수
호세인 Shahdoost

1
독창적 인 솔루션이지만 비용이 청구되는 경우를 대비하여 사용자에게 알리고 싶을 수 있습니다.
Norman H

3
간단한 문자 메시지를 받도록 요금을 청구 하는 제공자 가 있습니까 ?!
ThiefMaster

9
네 그럼요. 플랜에 문자 메시지를 추가하기 전에받은 문자 메시지 당 $ 0.30이 청구되었습니다. 캐나다의 로저스.
John Kroetch

44

업데이트 : Whatsapp이 전화 번호를 계정 이름으로 노출하는 것을 중지했기 때문에이 답변을 더 이상 사용할 수 없으므로이 답변을 무시하십시오.

전화 서비스를 통해 얻을 수없는 경우 실제로 고려해야 할 대체 솔루션이 있습니다.

현재로서는를 사용하여 다른 큰 응용 프로그램 Whatsapp에 의존 할 수 있습니다 AccountManager. 수백만 대의 기기에이 애플리케이션이 설치되어 있으며를 통해 전화 번호를 얻을 수없는 경우이 번호를 TelephonyManager지정할 수 있습니다.

허가:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

암호:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}

actypeWhatsApp 계정 확인

if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

물론 사용자가 WhatsApp을 설치하지 않았지만 시도해 볼 가치가 있으면 얻을 수 없습니다. 항상 사용자에게 확인을 요청해야합니다.


1
나는 오늘 계정을 엉망으로 만들 때 이것을 보았습니다. 숫자가 그렇게 노출되는 것은 꽤 나쁩니다. 물론 GET_ACCOUNTS 권한이 필요하며이 시점에서 사용자는 앱의 권한을 신경 쓰지 않을 것입니다.
jargetz

9
이 솔루션은 최신 버전이 아닙니다. Whatsapp는 더 이상 계정 이름에 전화 번호를 저장하지 않습니다. 새 업데이트 후 whatsapp가 전화 번호를 어디에 저장하는지 알고 있습니까?
Cohelad

@Cohelad 저를 업데이트 해 주셔서 감사합니다. 나중에 확인하고 확인 후이 답변을 건너 뜁니다. 한편 숫자를 저장할 위치를 모릅니다
Chor Wai Chun

3
그러나 Viber는 숫자를 드러냅니다! com.viber.voip.account
xnagyg

32

내에 게시 이전 답변에

아래 코드를 사용하십시오 :

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

AndroidManifest.xml에서 다음 권한을 부여하십시오.

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

그러나 휴대 전화 번호는 SIM 카드 및 네트워크 사업자 / 휴대 전화 사업자에 따라 다르므로이 코드가 항상 작동하는 것은 아닙니다.

또한 전화-> 설정-> 정보-> 전화 ID를 확인하십시오. 에서 확인하십시오. 번호를 볼 수 있으면 위 코드에서 전화 번호를 얻을 확률이 높습니다. 설정에서 전화 번호를 볼 수 없으면이 코드를 통해 얻을 수 없습니다!

제안 된 해결 방법 :

  1. 사용자의 전화 번호를 수동 입력으로 얻습니다.
  2. SMS를 통해 사용자의 휴대폰 번호로 코드를 보냅니다.
  3. 전화 번호를 확인하기 위해 코드를 입력하도록 요청하십시오.
  4. 번호를 sharedpreference에 저장하십시오.

앱을 처음 시작할 때 위의 4 단계를 한 번만 수행하십시오. 나중에 전화 번호가 필요할 때마다 공유 기본 설정에서 사용 가능한 값을 사용하십시오.


이 답변은 모든 요소를 ​​다루며, 허용되는 것이어야합니다 =)
Slava Fomin II

휴대 전화에 듀얼 심이있는 경우 어떻게 휴대 전화 번호를 모두받을 수 있습니까? 위의 코드로. 단일 시뮬레이션을 위해 잘 작동
Amrit Chakradhari

26

따라서 권한과 해킹없이 Play 서비스 API를 통해 전화 번호를 요청하는 방법입니다. 소스전체 예 .

build.gradle (버전 10.2.x 이상 필요)에서 :

compile "com.google.android.gms:play-services-auth:$gms_version"

귀하의 활동에서 (코드가 단순화되었습니다) :

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
    googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.CREDENTIALS_API)
            .build();
    requestPhoneNumber(result -> {
        phoneET.setText(result);
    });
}

public void requestPhoneNumber(SimpleCallback<String> callback) {
    phoneNumberCallback = callback;
    HintRequest hintRequest = new HintRequest.Builder()
            .setPhoneNumberIdentifierSupported(true)
            .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest);
    try {
        startIntentSenderForResult(intent.getIntentSender(), PHONE_NUMBER_RC, null, 0, 0, 0);
    } catch (IntentSender.SendIntentException e) {
        Logs.e(TAG, "Could not start hint picker Intent", e);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PHONE_NUMBER_RC) {
        if (resultCode == RESULT_OK) {
            Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY);
            if (phoneNumberCallback != null){
                phoneNumberCallback.onSuccess(cred.getId());
            }
        }
        phoneNumberCallback = null;
    }
}

다음과 같은 대화 상자가 생성됩니다.

여기에 이미지 설명을 입력하십시오


2
힌트 요청은 전화에 연결된 이메일 계정의 전화 번호를 표시하며 장치에 시뮬레이션이 없더라도 드롭 다운이 표시됩니다.
Ari

SIM이 하나만있는 상태에서 대화 상자에 여러 숫자가 어떻게 표시됩니까? 나를 위해, 그것은 5 개의 숫자를 보여줍니다. : / :)
cgr

안드로이드에서 자동으로 첫 번째 전화 번호를 어떻게 선택할 수 있습니까?
Noorul

13
private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s != null && s.length() > 2 ? s.substring(2) : null;
}

http://www.androidsnippets.com/get-my-phone-number 에서 가져온 코드


"s.substring (2)"때문에 @JaredBurrows.
Cookie Monster

1
그것은 나를 위해 작동하지 않습니다. NULL 값을 얻습니다 (스위스 SIM 카드, 스위스)
e-nature

귀하의 링크가 끊어졌습니다.
Ümañg ßürmån

11

사용자가 권한 없이도 전화 번호를 선택할 수있는 새로운 Android API가 있습니다. https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html을 살펴보십시오.

// Construct a request for phone numbers and show the picker
private void requestHint() {
    HintRequest hintRequest = new HintRequest.Builder()
       .setPhoneNumberIdentifierSupported(true)
       .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
        apiClient, hintRequest);
    startIntentSenderForResult(intent.getIntentSender(),
        RESOLVE_HINT, null, 0, 0, 0);
} 

Vlad

@ 블라드 아니에요. 대부분의 기기와 함께 제공되는 Google Play 서비스 만 있으면됩니다. 블로그 포스트에서 인용 : '시작하기 전에 SMS를 수신하고 Google Play 서비스 10.2.x 이상을 실행할 수있는 전화 번호가있는 기기를 빌드하고 테스트해야합니다.'
Wirling

9

위의 답변에서 위의 설명에 약간을 추가하고 싶습니다. 다른 사람들도 시간을 절약 할 수 있습니다.

필자의 경우이 방법은 휴대 전화 번호를 반환하지 않았으며 빈 문자열이 반환되었습니다. 내가 새로운 시뮬레이션에 내 번호를 포팅 한 경우 때문입니다. 따라서 설정> 전화 정보> 상태> 내 전화 번호로 이동하면 "알 수 없음"이 표시됩니다.


광산도이 조건은 무엇입니까? 로밍? 또는 심 카드에 숫자가 저장되어 있지 않을 수도 있습니다.
Alexandre Marcondes

8

때로는 아래 코드가 반환 null되거나 빈 문자열이 있습니다.

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

아래의 허락으로

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

전화 번호를 얻을 수있는 또 다른 방법이 있습니다.이를 여러 장치에서 테스트하지는 않았지만 위의 코드는 매번 작동하지 않습니다.

아래 코드를 사용해보십시오 :

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"};
Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
        main_data, "mimetype=?",
        new String[]{"vnd.android.cursor.item/phone_v2"},
        "is_primary DESC");
if (object != null) {
    do {
        if (!((Cursor) (object)).moveToNext())
            break;
        // This is the phoneNumber
        String s1 = ((Cursor) (object)).getString(4);
    } while (true);
    ((Cursor) (object)).close();
}

이 두 가지 권한을 추가해야합니다.

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />

도움이 되길 바랍니다. 감사합니다!


셀 번호 인 두 번째 스 니펫에서 질문 해 주시겠습니까?
iOSAndroidWindowsMobileAppsDev

1
의 값은 String s1전화 번호입니다.
activesince93

이 코드는 나를 위해 작동하지 않습니다. (마지막 코드 스 니펫). 빈 문자열을 반환합니다.
Kristy Welsh

답을 설명하십시오. 번호는 어디에 저장되어 있으며이 번호는 어떻게 포함되어 있습니까? 무엇에 의존 하는가?
not2qubit

3
@ not2qubit 연락처 앱에서 자체 연락처에 액세스하고 있다고 생각합니다.
Samplasion

4

이것은 더 간단한 답변입니다.

public String getMyPhoneNumber()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getLine1Number();
}

3

우선 사용자에게 휴대 전화 번호를 제공하는 것이 윤리 정책에 위배되는 것은 가능했지만 이전에는 가능한 한 해결책이 없었습니다. 일부 코드를 사용하면 휴대 전화 번호를 얻을 수는 있지만 작동하지 않을 수도 있습니다 소수의 장치에서만. 많은 연구 끝에 세 가지 솔루션 만 발견했지만 모든 장치에서 작동하지는 않습니다.

우리가 얻지 못하는 이유는 다음과 같습니다.

1. 휴대 전화 번호를 휴대 전화 번호를 사용할 수없는 경우 휴대 전화 번호를 가진 휴대 전화 관리자를 사용하여 휴대 전화 번호를 사용할 수있는 경우 안드로이드 번호 및 휴대 전화 번호를 휴대 전화 번호를 사용할 수없는 경우 휴대 전화 번호를 저장하지 않는 다른 SIM 카드 번호 현명하게 "null"또는 ""또는 "??????"를 반환합니다.

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

 TelephonyManager tel= (TelephonyManager)this.getSystemService(Context.
            TELEPHONY_SERVICE);
    String PhoneNumber =  tel.getLine1Number();

참고 :-Moto x, Samsung Tab 4, Samsung S4, Nexus 5 및 Redmi 2 프라임 장치 에서이 솔루션을 테스트했지만 빈 문자열을 반환 할 때마다 작동하지 않으므로 결론은 쓸모가 없습니다.

  1. 이 방법은 Redmi 2 프라임에서만 작동하지만 매니페스트에 읽기 연락처 권한을 추가해야합니다.

참고 :-이것은 또한 보장되고 효율적인 솔루션이 아니며 많은 장치 에서이 솔루션을 테스트했지만 이중 Sim 장치 인 Redmi 2 프라임에서만 작동했습니다. 내 두 번째 sim에 속한다. 내가 사용하지 않는 오래된 sim 카드에 속한다.

 String main_data[] = {"data1", "is_primary", "data3", "data2", "data1",
            "is_primary", "photo_uri", "mimetype"};
    Object object = getContentResolver().
            query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
            main_data, "mimetype=?",
            new String[]{"vnd.android.cursor.item/phone_v2"},
            "is_primary DESC");
    String s1="";
    if (object != null) {
        do {
            if (!((Cursor) (object)).moveToNext())
                break;
            // This is the phoneNumber
             s1 =s1+"---"+ ((Cursor) (object)).getString(4);
        } while (true);
        ((Cursor) (object)).close();
    }
  1. 내 연구에서 이전에 WhatsApp 계정을 사용하여 휴대 전화 번호를 얻을 수 있었지만 이제 새로운 Whatsapp 버전은 사용자의 휴대 전화 번호를 저장하지 않습니다.

결론 :-안드로이드는 프로그래밍 방식으로 사용자의 휴대 전화 번호를 얻는 보장 솔루션이 없습니다.

제안 :-1. 사용자의 휴대 전화 번호를 확인하려면 otp를 사용하여 사용자에게 전화 번호를 제공하도록 요청하면 otp를 사용하여 확인할 수 있습니다.

  1. 사용자의 장치를 식별하려면 장치 IMEI 번호를 쉽게 얻을 수 있습니다.

2

TelephonyManager경우에 따라 숫자가 SIM에 저장되지 않기 때문에 올바른 솔루션이 아닙니다. 응용 프로그램을 처음 열 때 사용자의 전화 번호를 저장하려면 공유 기본 설정을 사용해야하며 필요할 때마다 번호가 사용되도록 제안합니다.


1
그러나이 방법은 오류가 발생하기 쉽습니다. 사용자는 잘못된 번호를 입력 할 수 있습니다.
Zohra Khan

3
예,이 목적으로 저는 문자 메시지를 사용했습니다. 사용자가 숫자를 입력하면 SmsManager에서 앱 메시지 자체를 통해 smsReciever를 사용하여 원래 번호를 가져올 수 있습니다
Naveed Ahmad

1
질문이 하나 더 있습니다.이 방법을 사용하면 사용자가 SMS를 무료로받을 수 있습니다 (무료 전화 번호가 아닌 경우). 전화를받을 수있는 다른 방법이 있습니까?
Zohra Khan

물론 무료 전화 번호가 아닌 경우 해당 SMS에 요금이 부과됩니다.
Naveed Ahmad

지금까지 TelephonyManager가 없으면 그러한 방법이 없다고 생각합니다. 전화 답변에 문제가 있음을 지적합니다.
Naveed Ahmad

2

다음은 내가 찾은 솔루션의 조합입니다 ( 자동 채우기도 확인하려는 경우 샘플 프로젝트 here ).

명백한

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

build.gradle

    implementation "com.google.android.gms:play-services-auth:17.0.0"

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private lateinit var googleApiClient: GoogleApiClient

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tryGetCurrentUserPhoneNumber(this)
        googleApiClient = GoogleApiClient.Builder(this).addApi(Auth.CREDENTIALS_API).build()
        if (phoneNumber.isEmpty()) {
            val hintRequest = HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build()
            val intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest)
            try {
                startIntentSenderForResult(intent.intentSender, REQUEST_PHONE_NUMBER, null, 0, 0, 0);
            } catch (e: IntentSender.SendIntentException) {
                Toast.makeText(this, "failed to show phone picker", Toast.LENGTH_SHORT).show()
            }
        } else
            onGotPhoneNumberToSendTo()

    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_PHONE_NUMBER) {
            if (resultCode == Activity.RESULT_OK) {
                val cred: Credential? = data?.getParcelableExtra(Credential.EXTRA_KEY)
                phoneNumber = cred?.id ?: ""
                if (phoneNumber.isEmpty())
                    Toast.makeText(this, "failed to get phone number", Toast.LENGTH_SHORT).show()
                else
                    onGotPhoneNumberToSendTo()
            }
        }
    }

    private fun onGotPhoneNumberToSendTo() {
        Toast.makeText(this, "got number:$phoneNumber", Toast.LENGTH_SHORT).show()
    }


    companion object {
        private const val REQUEST_PHONE_NUMBER = 1
        private var phoneNumber = ""

        @SuppressLint("MissingPermission", "HardwareIds")
        private fun tryGetCurrentUserPhoneNumber(context: Context): String {
            if (phoneNumber.isNotEmpty())
                return phoneNumber
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                val subscriptionManager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
                try {
                    subscriptionManager.activeSubscriptionInfoList?.forEach {
                        val number: String? = it.number
                        if (!number.isNullOrBlank()) {
                            phoneNumber = number
                            return number
                        }
                    }
                } catch (ignored: Exception) {
                }
            }
            try {
                val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
                val number = telephonyManager.line1Number ?: ""
                if (!number.isBlank()) {
                    phoneNumber = number
                    return number
                }
            } catch (e: Exception) {
            }
            return ""
        }
    }
}

pl 이 방법을 구현하기 전에이 답변에 대한 의견을 참조하십시오 stackoverflow.com/a/48210130/5457916
humble_wolf

귀하가 제공 한 링크는 내가 한 일의 일부일뿐입니다. 여기에서 나는 먼저 자동 채우기를 시도했습니다. 그리고 이것에 대한 단점이 있습니다.
안드로이드 개발자

나는 당신의 대답이 위대하고 어떤 의미에서도 부정확하지 않다는 것을 알고 있습니다. 나는 독자들이 이런 방식으로 오는 조건을 알기를 원했습니다. 예를 들어 주석에 언급 된 Google 계정과 관련된 숫자를 채울 수 있습니다.
humble_wolf

나는 아직도 내가 쓴 것을 선호합니다. 죄송합니다
Android 개발자

1

약간의 기여. 필자의 경우 코드에서 오류 예외가 발생했습니다. 코드를 실행하고 해당 문제를 해결하기 위해 주석을 추가해야했습니다. 여기 에이 코드를 보자.

public static String getLineNumberPhone(Context scenario) {
    TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE);
    @SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number();
    return mPhoneNumber;
}

0

음성 메일 계정이 여러 개있을 수도 있지만 자신의 번호로 전화를 걸면 통신 사업자가 사용자를 음성 메일로 라우팅합니다. 그래서, TelephonyManager.getVoiceMailNumber()또는 TelephonyManager.getCompleteVoiceMailNumber()당신이 원하는 맛에 따라.

도움이 되었기를 바랍니다.


5
"getCompleteVoiceMailNumber"함수가 없으며 getVoiceMailNumber ()는 실제 전화 번호와 다른 숫자를 리턴합니다.
안드로이드 개발자

이것은 전 세계의 두 이동 통신 사업자와 만 작동하는 트릭입니다. 그러나 기술적으로 해결 방법이 될 수 있습니다.
technik

0

이 의존성을 추가하십시오 : implementation 'com.google.android.gms:play-services-auth:18.0.0'

전화 번호 목록을 가져 오려면 다음을 사용하십시오.

val hintRequest = HintRequest.Builder()
    .setPhoneNumberIdentifierSupported(true)
    .build()

val intent = Credentials.getClient(context).getHintPickerIntent(hintRequest)

startIntentSenderForResult(
    intent.intentSender,
    PHONE_NUMBER_FETCH_REQUEST_CODE,
    null,
    0,
    0,
    0,
    null
)

플레이 서비스 대화 상자를 탭한 후 :

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent? { 
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == PHONE_NUMBER_FETCH_REQUEST_CODE) {
        data?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)?.id?.let { 
            useFetchedPhoneNumber(it)
        }
    }
}

-6

내 휴대 전화를 손에 넣을 수있는 사람의 전화 번호를 가져와야하는 보안 앱을 개발하면서이 작업을 수행해야했습니다. 1. 부팅이 완료된 후 telephonyManager에서 Line1_Number를 가져 와서 문자열 결과를 반환하십시오. 2. 문자열 결과를 내 전화 번호와 비교하고 일치하지 않거나 문자열이 null을 반환하는 경우 3. 문자열 결과와 특수 기호가 포함 된 SMS를 내 사무실 번호로 비밀리에 보냅니다. 4. 메시지 전송에 실패하면 서비스를 시작하고 보낸 SMS 보류 의도가 성공적으로 반환 될 때까지 매 시간마다 계속 시도하십시오. 이 단계를 통해 분실 전화를 사용하는 사람의 수를 알 수있었습니다. 요금이 청구되는지는 중요하지 않습니다.


왜 downvotes?
humble_wolf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.