2012-03-12 3 views
0

Я нахожусь в фазе разработки приложения в журналах вызовов. Прежде чем погрузиться в него, я хотел бы получить некоторую информацию об этом, поскольку прочитал класс журналов вызовов в Android Developer.Как сортировать журналы вызовов для международных звонков и местных звонков?

Я хочу знать, есть ли способ сортировать журналы вызовов и смс и извлекать только международные и локальные (тоже то же самое с смс). Возможно ли, что я выполню эту задачу, используя библиотеку сторонних разработчиков, например Libphonenumber? Если у кого-то есть код и предложение, которые помогут мне, я буду очень благодарен. Я был бы признателен за решение в виде кода или совета относительно того, как я могу это сделать. Я действительно не хочу, чтобы застрять на полпути, когда я начала работать над проектом

Это код, который я должен получить журналы вызовов только для исходящих вызовов

managedCursor = managedQuery(CallLog.Calls.CONTENT_URI,null, null,null, null); 
    int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
    int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
    int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
    int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 


    while (managedCursor.moveToNext()) { 

    String phNumber = managedCursor.getString(number); 

    String callType = managedCursor.getString(type); 
    String callDate = managedCursor.getString(date); 
    Date callDayTime = new Date(Long.valueOf(callDate)); 
    String callDuration = managedCursor.getString(duration); 

    int realdura=Integer.parseInt(callDuration); 

    String dir = null; 
    int dircode = Integer.parseInt(callType); 
    if(dircode==CallLog.Calls.OUTGOING_TYPE){ 
     dir="OutGoing Call"; 

    total_duration=realdura+total_duration; 
    callList=("\nPhone Number:--- "+phNumber +" \nCall Type:--- "+dir+" \nCall Date:--- "+callDayTime+" \nCall duration in sec :--- "+callDuration); 

    data.add(callList); 
    } 
    } 

    managedCursor.close(); 

    call.setText("the total duration is: "+total_duration); 
    list_data=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data); 
    call_list.setAdapter(list_data); 
    } 

ответ

1

Использование libphonenumber, казалось бы, быть хорошая идея, чтобы все работало на международном уровне, есть лот особенностей страны в том, как они представлены.

Что вам нужно, это вызов PhoneNumberUtil.parse (который я не могу связать непосредственно), и выбрать country_code из полученного PhoneNumber (документально here in the example) Это должно позволить вам просто сравнить код страны к локальной код страны и легко узнать, является ли вызов международным.

Вот быстрый и грязный пример (без обработки ошибок), «СЭ» является Швеция с международным кодом вызова «00» и код страны «46» (то есть число внутренних и выходов, что)

public static void main(String[] argv) throws NumberParseException { 
    String str = "00468328999298"; 

    PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); 

    Phonenumber.PhoneNumber number = phoneNumberUtil.parse(str, "SE"); 
    if(number.getCountryCode() != phoneNumberUtil.getCountryCodeForRegion("SE")) 
     System.out.println("International"); 
    else 
     System.out.println("Domestic"); 
} 
+0

Спасибо. можете ли вы рассказать мне, какие из версий libphonenuber я могу добавить в свое приложение? –

+0

@net_whiz У меня никогда не было проблем с тем, что я собираюсь только на новейшую версию, которая говорит, что я использовал ее только на Android 2.1 и новее. –

+0

@ Joachim Isaksson Я читаю по ссылке, которую вы мне прислали, и она выглядит хорошо, но можете ли вы дать мне пример кода, который у вас есть о том, как вы это сделали, чтобы я мог взять на себя инициативу оттуда. –

Смежные вопросы