gpt4 book ai didi

java - 无法获取最近调用的号码

转载 作者:行者123 更新时间:2023-11-30 11:37:51 24 4
gpt4 key购买 nike

我在 Android 应用程序中工作,我必须获取最近 20 个调用的电话。

这是我的 Activity :

public class Calls extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calls);
TextView dialledCall = (TextView)findViewById(R.id.dialledCall);
Cursor managedCursor;
try {

StringBuffer sb = new StringBuffer();
String strOrder = CallLog.Calls.DATE + " DESC";
managedCursor = managedQuery( CallLog.Calls.CONTENT_URI,null, CallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPE,null, strOrder + " LIMIT 0, 6");
managedCursor.moveToFirst();
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);
sb.append( "Dialled Calls :");

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 );
String dir = null;
int dircode = Integer.parseInt( callType );

switch( dircode ) {
case CallLog.Calls.OUTGOING_TYPE:
dir = "Dialled";
break;
}

sb.append( "\nPhone Number : "+phNumber +" \nCall Type : "+dir+" \nCall Date : "+callDayTime+" \nCall duration in sec : "+callDuration );
sb.append("\n----------------------------------");
}
sb.append("\n==================================");
sb.append("\n\n");
managedCursor.close();
Toast.makeText(this, "Eureka :)", Toast.LENGTH_SHORT).show();

managedCursor = managedQuery( CallLog.Calls.CONTENT_URI,null, CallLog.Calls.TYPE + " = " + CallLog.Calls.INCOMING_TYPE,null, strOrder + " LIMIT 0, 6");
managedCursor.moveToFirst();
int number1 = managedCursor.getColumnIndex( CallLog.Calls.NUMBER );
int type1 = managedCursor.getColumnIndex( CallLog.Calls.TYPE );
int date1 = managedCursor.getColumnIndex( CallLog.Calls.DATE);
int duration1 = managedCursor.getColumnIndex( CallLog.Calls.DURATION);
sb.append( "Received Calls :");
while ( managedCursor.moveToNext() ) {

String phNumber1 = managedCursor.getString( number1 );
String callType1 = managedCursor.getString( type1 );
String callDate1 = managedCursor.getString( date1 );
Date callDayTime1 = new Date(Long.valueOf(callDate1));
String callDuration1 = managedCursor.getString( duration1 );
String dir1 = null;
int dircode = Integer.parseInt( callType1 );

switch( dircode ) {
case CallLog.Calls.INCOMING_TYPE:
dir1 = "Received";
break;
}
sb.append( "\nPhone Number : "+phNumber1 +" \nCall Type : "+dir1+" \nCall Date : "+callDayTime1+" \nCall duration in sec : "+callDuration1 );
sb.append("\n----------------------------------");
}
sb.append("\n==================================");
sb.append("\n\n");
managedCursor.close();
Toast.makeText(this, "Eureka :) 1", Toast.LENGTH_SHORT).show();
managedCursor.close();
}


catch (NullPointerException e) {
// TODO: handle exception
Toast.makeText(this, "Sorry Man :(", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}

这是相应的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true" >

<Linearlayout android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">

<TextView
android:id="@+id/dialledCall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="13dp" />

</Linearlayout>
</ScrollView>

输出:我能够得到前 5 个拨出的号码,但在接听的电话中我什至得到了消息

我做错了什么?

最佳答案

很可能您缺少权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />

或者你的循环不正确,试试这种循环:

int count = 0;
if (cursor.moveToFirst()) {
do {
// Read your row here

++count;
} while (cursor.moveToNext() && count<20);
}
cursor.close();

直接在查询中而不是在循环本身中限制行数会更有效:

managedQuery( CallLog.Calls.CONTENT_URI, null, 
CallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPE,
null, strOrder + " LIMIT 0, 20");

关于java - 无法获取最近调用的号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13873735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com