プログラムで各デバイスの電話番号を取得することは可能ですか?私はこのコードを試しました:
TelephonyManager manager =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
mPhoneNumber = manager.getLine1Number();
これは一部のプロバイダーで正常に動作します。残念ながら、それは各プロバイダーで動作しません。だから私はデバイスの電話番号を取得するためのトリックや回避策を探しています。解決策はありますか、番号がsimカードに保存されていないため不可能ですか
使用している方法はこれを行うためのSDKの唯一の部分であり、SIMカードに番号が保存されているデバイスでのみ機能します。他のすべてのキャリアでは、電話番号を取得できる場所からデバイスに保存されていないため、電話番号を手動で入力するようユーザーに要求する必要があります。
特定のSMS=をISPに送信してみてください。たとえば、北京(中国)では、SMS "501"を10001に送信すると、受信したメッセージにあなたの電話番号を入力します。次に、メッセージの受信方法を知るだけで、SMSを送信し、BroadcastReceiverを登録してメッセージを受信できます。
今では、電話番号を取得するために許可を必要とせず、許可とハッキングなしにPlay Services 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;
}
}