我刚刚构建了一个检测来电的应用程序。我看到在某些手机(或不同版本的Android)中,来电号码有国家代码,有些来电号码没有。有没有办法在任何Android手机和任何版本的Android中使用国家/地区代码接听来电?
我使用广播接收器和PhoneStateListener,我在onCallStateChanged获取incomingNumber的参数。所以我没有使用telephonymanager.EXTRA_PHONE_NUMBER(事实上我并不是EXTRA_PHONE_NUMBER究竟做了什么)
答案 0 :(得分:2)
以下是您可以在BroadcastReceiver中使用 libphonenumber 库提取国家/地区代码的代码段。
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
// get phone number from bundle
String phoneNumber = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER);
// get country-code from the phoneNumber
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
PhoneNumber numberProto = phoneUtil.parse(phoneNumber, Locale.getDefault().getCountry());
if (phoneUtil.isValidNumber(numberProto)) {
log.d("TAG", "Country Code: " + numberProto.getCountryCode());
} else {
log.d("TAG", "Invalid number format: " + phoneNumber);
}
} catch (NumberParseException e) {
Log.d(TAG, "Unable to parse phoneNumber " + e.toString());
}
}
}
答案 1 :(得分:1)
您可以使用libphonenumber库https://code.google.com/p/libphonenumber/
完成此操作答案 2 :(得分:0)
EXTRA_PHONE_NUMBER
保留用户
包含最初输入的电话号码的字符串 ACTION_NEW_OUTGOING_CALL,或者要拨打的实际号码 ACTION_CALL。
通过http://developer.android.com/reference/android/content/Intent.html#EXTRA_PHONE_NUMBER