如何在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());
            }
请参阅这篇不错的博客文章以获取更多信息。