我正在开发一个具有登录活动的应用,其中,当用户登录时,它会自动将联系人从手机保存到服务器。这有效,但我有一个问题,当我保存数字时,他们以用户在手机中输入的格式保存。例如,如果用户输入了这个号码:+15555555,它将被保存,但如果他输入没有国家代码,它将如下所示:5555555,没有+1,或任何其他国家/地区代码,具体取决于国家/地区。
我想要的是使用国家/地区代码返回我的所有联系人,即使是那些用户在没有国家/地区代码时输入的联系人。
像Viber这样的应用程序可以识别它所处的格式,因此如果它不是以+1开头,或者以05 ..开头,它会被识别并自动添加国家代码,以便05 ..变为15 ...
public void updateContacts() {
String[] PROJECTION = new String[]{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, null);
HashMap<String, String> user = db.getUserDetails();
String userId = user.get("uid");
if (phones != null) {
while (phones.moveToNext()) {
if (phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER) != -1) {
final String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<ContactsResponse> call = apiService.contactExists(phoneNumber, userId);
call.enqueue(new Callback<ContactsResponse>() {
@Override
public void onResponse(Call<ContactsResponse> call, retrofit2.Response<ContactsResponse> response) {
Log.e(TAG, "abc");
}
@Override
public void onFailure(Call<ContactsResponse> call, Throwable t) {
Log.e(TAG, t.toString());
}
});
}
}
}
if (phones != null) {
phones.close();
}
}
我正在使用libphonenumber,所以我想知道是否有办法使用它并获取国家代码,然后将其添加到没有它的数字。
答案 0 :(得分:2)
不可能。如果用户未键入国家/地区代码或区域代码,则在调用该号码时,服务提供商将自动假定他们正在使用他们当前所在的国家/地区代码/区域代码。如果您有518-222-2345已保存,您在美国拨打此号码,服务提供商将在开头添加+1。如果用户随后前往英国并尝试拨打相同号码(联系人条目),则服务提供商将在前面添加+44代码。简而言之,您看到的数据是存储在设备上的所有数据,当特定数据(国家/地区代码/区域代码)不存在时,服务提供商会采用当前所在位置的代码。