如何使用contentOberser知道它们是否在呼叫日志中发生了变化。

时间:2014-03-24 10:37:39

标签: android calllog contentobserver

我是Android开发的新手。 我想监视呼叫日志中发生的变化。我的代码正在获取所有呼叫历史记录,直到最后一次呼叫记录。当我运行我的应用程序时,它再次取出所有日志,包括最新的日志,但我只想要最新的更改。请指导我如何使用 contentOberser 实现这一目标?请帮忙。这是我的代码

private void conatctDetails()
    {
        StringBuffer sb = new StringBuffer();
        Cursor c1 = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME);
        sb.append("Contact details:");
        try
        {
        while(c1.moveToNext())
          {
              String id = c1.getString(c1.getColumnIndex(ContactsContract.Contacts._ID));
              String name =c1.getString(c1.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
              String timesContacted =c1.getString(c1.getColumnIndex(ContactsContract.Contacts.TIMES_CONTACTED));
              String lastTimeContacted =c1.getString(c1.getColumnIndex(ContactsContract.Contacts.LAST_TIME_CONTACTED));

              String number="";
             // String number =c1.getString(c1.getColumnIndex(CommonDataKinds.Phone.NUMBER));
              if(id==null||name==null)
                  continue;
              Cursor cur = getContentResolver().query(CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
                if(cur==null)
                    continue;
                number = "";
                while(cur.moveToNext())
                {
                    number = cur.getString(cur.getColumnIndex(CommonDataKinds.Phone.NUMBER));
                    sb.append("\n Contact Number:--"+number);
                }

              sb.append("\n Contact Name:--"+name+"\n Contact ID:--"+id+"\n Last Time Contacted:--"+lastTimeContacted+"\n Total Time Contacted:--"+timesContacted);

        sb.append("\n----------------------------");
          }
        //c1.close();
         contact.setText(sb);

    }
    catch(Exception e)
    {

    }
        finally
        {
            c1.close();
        }
    }

1 个答案:

答案 0 :(得分:0)

如果在来电时触发了Intent,您可以使用BroadcastReceiver让您的应用响应并在您的清单中创建IntentFilter

或者只是在您的应用启动时查询提供商...

ACTION_PHONE_STATE_CHANGED是您可以监听的TelephonyManager意图,并检查它是否为TelephonyManager.CALL_STATE_RINGING