如何获取最近拨打的号码

3

我正在开发一个应用程序,需要获取最近拨打的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个数字。但是查询返回的是所有数字,包括已拨、未接和已接电话。然而,我只想要已拨出的号码。

我知道上面的查询与CallLog.Calls.TYPE有关。

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

我还尝试了将其替换为CallLog.Calls.OUTGOING_TYPE,但是它给出错误提示,即int值不被允许,应该是一个字符串值。

有任何建议来替换上面的代码,以便只获取打出的电话呢?

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


由于您已经提出了这个问题,而我的问题和您的问题相似,我想获取最近拨出的20个电话记录,并且我觉得您的代码很有趣...所以,您能否给我一些获取最近20个拨出电话记录的想法呢? - user1645434
没错,我已经使用do while循环中的if条件获取了最后5个调用。我使用了if(i>5)来获取最后5个调用,你可以使用if(i>20),然后跳出循环。希望能有所帮助。告诉我是否有帮助。 - Sahil Mahajan Mj
当然,感谢您宝贵的评论。 - user1645434
还有一件事,就是你说这段代码正在获取拨打、接收和未接来电的信息,但我只想要关于已拨电话的信息。对于这个情况,有什么建议吗? - user1645434
1
嗯,我已经解决了这个问题,让我发布答案。 - Sahil Mahajan Mj
@user1645434:我已发布了答案。请告诉我是否解决了你的问题。 - Sahil Mahajan Mj
2个回答

1

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

您可能会对getLastOutgoingCall方法感兴趣,该方法返回最后拨打的电话号码。

检查通话记录。 您可以轻松访问此信息。 像这样做:

定义, public 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);     

你应该再看一下问题。我只想根据最近拨打的号码对光标数据进行排序。我不需要号码的不同字段,并且我已经按降序完成了STR_ORDER。 - Sahil Mahajan Mj

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 将拨出电话分离出来。


问这个可能有点傻(我是Android新手),......我需要在Activity类的一个函数中调用这些代码吗? - user1645434
是的,你可以直接在你的Activity的onCreate方法中使用它。我已经编辑了我的回答。请记住,永远不要犹豫去问。如果你从不问,你就永远不会知道。 - Sahil Mahajan Mj
@user1645434:为什么不发布一个包含这些问题的新问题,并在这里分享链接。那样更容易解决它。 - Sahil Mahajan Mj
因为我被禁止提问了 (: :( ,你只需告诉我相应的拨号布局,我会解决它。 - user1645434
我在main布局中创建了一个id为dialledCallTextView,并在此处进行了初始化。 - Sahil Mahajan Mj
显示剩余12条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接