it-swarm.com.de

Erhalten Sie programmgesteuert eine Telefonnummer - Android

ist es möglich, die Telefonnummer jedes Geräts programmgesteuert zu erhalten? Ich habe diesen Code ausprobiert:

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

Dies funktioniert gut mit einigen Anbietern. Leider funktioniert es nicht bei jedem Provider. Ich suche also einen Trick oder arbeite herum, um die Telefonnummer des Geräts zu erhalten. Gibt es eine Lösung oder ist dies nicht möglich, weil die Nummer nicht auf der SIM-Karte gespeichert ist?

19
JavaForAndroid

Die von Ihnen verwendete Methode ist der einzige Teil des SDK, der dies ausführt, und funktioniert nur auf Geräten, auf denen die Nummer auf der SIM-Karte gespeichert ist, was nur einige Netzbetreiber tun. Bei allen anderen Netzbetreibern müssen Sie den Benutzer auffordern, die Telefonnummer manuell einzugeben, da die Nummer einfach nicht auf dem Gerät gespeichert ist, wo Sie sie abrufen können.

16
Raghav Sood

Sie können versuchen, bestimmte SMS an ISP zu senden. Wenn Sie beispielsweise in Peking (China) SMS "501" an 10001 senden, erhalten Sie Ihre Telefonnummer in der empfangenen Nachricht. Dann müssen Sie nur noch wissen, wie man SMS) sendet und einen BroadcastReceiver registriert, um die Nachricht zu empfangen.

0
Zhou Hongbo

Jetzt ist keine Erlaubnis erforderlich, um eine Telefonnummer zu erhalten. Verwenden Sie die Play Services-API ohne Erlaubnis und Hacks. Quelle und Vollständiges Beispiel.

build.gradle (Version 10.2.x und höher erforderlich):

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

In Ihrer Aktivität (der Code ist vereinfacht):

Bildbeschreibung hier eingeben

@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;
}
}
0
Atul