如何将通话记录排序为国际电话和本地电话?

时间:2012-03-12 09:03:59

标签: android

我正处于开发呼叫日志应用程序的阶段。在我深入研究之前,我想了解一些有关这方面的信息,因为我已经阅读了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 个答案:

答案 0 :(得分:1)

使用libphonenumber似乎是一个好主意,让事情在国际上发挥作用,有一个很多国家细节如何表示。

你需要的是电话PhoneNumberUtil.parse(我似乎无法直接链接),并从生成的电话号码中选择country_code(记录为here in the example)这应该只允许你将国家/地区代码与您当地的国家/地区代码进行比较,并轻松了解该呼叫是否为国际。

这是一个快速而肮脏的例子(没有错误处理),“SE”是瑞典,国际电话代码为“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");
}