是否可以通过编程方式获取每个设备的电话号码? 我试过这段代码:
TelephonyManager manager =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
mPhoneNumber = manager.getLine1Number();
这适用于某些提供商。不幸的是,它不适用于每个提供商。所以我正在寻找一个技巧或解决方法来获得设备的电话号码。有解决方案还是不可能,因为这个号码没有存储在SIM卡上?
答案 0 :(得分:16)
您使用的方法是SDK中唯一可以执行此操作的部分,并且仅适用于SIM卡上存储号码的设备,而只有部分运营商才会这样做。对于所有其他运营商,您必须要求用户手动输入电话号码,因为该号码不会存储在设备的任何位置,您可以从中检索它。
答案 1 :(得分:0)
您可以尝试向ISP发送特定的短信。 例如,在北京(中国),当您发送短信" 501"到10001,您将在收到的消息中获得您的电话号码。 然后,您只需要知道如何发送SMS并注册BroadcastReceiver以接收消息。
答案 2 :(得分:0)
现在不需要任何许可来获取电话号码 未经许可和黑客使用Play Services API。 Source和Full example.
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;
}
}