如何解决如何在Android中获取通话时间?并多次写入文件中的数据?
| public void onCallStateChanged(int state,String incomingNumber)
{
System.out.print(\"\\nState :- \"+state);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
if(flag==true && ringflag == true)
{
flag=false;
ringflag=false;
System.out.print(\"\\nflag = \" + flag);
System.out.print(\"\\nringflag = \" + ringflag);
stop = System.currentTimeMillis();
System.out.println(\"\\nTotal time : \" +stop);
System.out.println(\"\\nTotal time : \" +(stop - start)/1000);
System.out.println(\"\\nIDLE : \" + incomingNumber);
long time = (stop - start) / 1000;
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
f = new File(path + \"/sms.txt\");
if (f.exists()) {
try {
raf =new RandomAccessFile(f,\"rw\");
long pointer = raf.length();
raf.seek(pointer);
String data = \":-\"+no+\",\"+time;
raf.writeBytes(data);
raf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
raf = new RandomAccessFile(f,\"rw\");
String data = \":-\"+no+\",\"+time;
raf.writeBytes(data);
raf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if(ringflag == true)
{
System.out.println(\"OFFHOOK :- \" + incomingNumber);
start = System.currentTimeMillis();
System.out.print(\"\\nStart is :-\" + start);
flag=true;
}
break;
case TelephonyManager.CALL_STATE_RINGING:
no = incomingNumber;
System.out.println(\"Ringing : \" + incomingNumber);
ringflag= true;
break;
}
}
解决方法
我可以回答您问题的第一部分
要获得通话时间,访问the1很重要。
使用CallLog.Calls中给出的信息,可以像下面这样完成:
Uri allCalls = Uri.parse(\"content://call_log/calls\");
Cursor c = managedQuery(allCalls,null,null);
for(String colName : c.getColumnNames())
Log.v(TAG,\"Column Name: \" + colName);
if (c.moveToFirst())
{
do{
String id = c.getString(c.getColumnIndex(CallLog.Calls._ID));
String num = c.getString(c.getColumnIndex(CallLog.Calls.NUMBER));
int type = Integer.parseInt(c.getString(c.getColumnIndex(CallLog.Calls.TYPE)));
String duration = c.getString(c.getColumnIndex(CallLog.Calls.DURATION));
System.out.println(\"call time duration is\"+duration);
switch (type)
{
case 1: Log.v(TAG,id + \",\" +num + \": INCOMING\") ; break;
case 2: Log.v(TAG,\" +num + \": OUTGOING\") ;break;
case 3: Log.v(TAG,\" +num + \": MISSED\") ; break;
}
} while (c.moveToNext());
}
请参阅这篇不错的博客文章以获取更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。