我正在开发一个应用程序,我需要获取最近拨打的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,但它没有提供仅提取已拨号码的解决方案。
答案 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
分隔出拨打的电话。