如何获取最近拨打的号码

时间:2012-11-17 11:48:00

标签: android phone-call

我正在开发一个应用程序,我需要获取最近拨打的5个号码。我可以按降序对数字进行排序,因为最近拨打的数字是第一位的。我使用以下代码来获取最近的数字。

dialledCall = (TextView)findViewById(R.id.dialledCall);

              String strOrder = CallLog.Calls.DATE + " DESC";
              Cursor mCallCursor = getApplicationContext().getContentResolver().query(CallLog.Calls.CONTENT_URI,
                      null,
                      CallLog.Calls.TYPE 
                      ,null,
                      strOrder);
              mCallCursor.moveToFirst();
              do {
                  if( i >5 )
                      break;
                  mobileNumber =   mCallCursor.getString(mCallCursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
              number += mobileNumber + "\n";

              i++;
              }
              while (mCallCursor.moveToNext());
         dialledCall.setText(number);

有了这个,我能够按最近的顺序对数字进行排序,而且我刚刚获取了最后5个数字。但查询返回所有数字,我的意思是Dialed,Missed和Received。但在这里我只想要拨打的号码。

我知道在上述查询中与CallLog.Calls.TYPE有关。

我尝试传递null值,但它返回所有数字。

我也尝试用CallLog.Calls.OUTGOING_TYPE来代替它,但是它给出了错误,即不允许使用int值,它应该是一个字符串值。

有关如何替换上述代码的任何建议,以便只获取拨打的电话。

注意 - 我已经查看了https://stackoverflow.com/a/10480569/1626878,但它没有提供仅提取已拨号码的解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用CallLog类来获取此信息(请参阅http://developer.android.com/reference/android/provider/CallLog.Calls.html)。

您对getLastOutgoingCall方法感兴趣,该方法返回最后一个被叫的电话号码。

检查通话记录。您可以轻松访问它。做点什么,

定义, 公开Cursor mCallCursor;

然后定义要从通话记录中获取的字段

public static final String[] STR_FIELDS = {
        android.provider.CallLog.Calls.NUMBER, 
        android.provider.CallLog.Calls.TYPE,
        android.provider.CallLog.Calls.CACHED_NAME,
        android.provider.CallLog.Calls.CACHED_NUMBER_TYPE,
        android.provider.CallLog.Calls.DATE,
        android.provider.CallLog.Calls.DURATION, android.provider.CallLog.Calls.CACHED_NUMBER_LABEL,android.provider.CallLog.Calls.NUMBER
        };

设定顺序, public static final String STR_ORDER = android.provider.CallLog.Calls.DATE +“DESC”;

调用光标。

mCallCursor = getContentResolver().query(
            android.provider.CallLog.Calls.CONTENT_URI,
            STR_FIELDS,
            null,
            null,
            STR_ORDER);     

答案 1 :(得分:1)

我已经解决了这个问题,所以我将它发布给未来的访问者。

    String mobileNumber="";
    int i = 1;
    String number = "";
    TextView dialledCall;
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            dialledCall = (TextView)findViewById(R.id.dialledCall);

    //              String[] strFields = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME,         android.provider.CallLog.Calls.CACHED_NUMBER_TYPE, android.provider.CallLog.Calls.DURATION     };
                  String strOrder = CallLog.Calls.DATE + " DESC";
                  Cursor mCallCursor = getApplicationContext().getContentResolver().query(CallLog.Calls.CONTENT_URI,
                          null,
                          CallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPE
                          ,null,
                          strOrder);
                  mCallCursor.moveToFirst();
                  do {
                      if( i >5 )
                          break;
                      mobileNumber =   mCallCursor.getString(mCallCursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                  number += mobileNumber + "\n";

                  i++;
                  }
                  while (mCallCursor.moveToNext());
             dialledCall.setText(number);
        }

查询中的CallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPE分隔出拨打的电话。