0

J'essaie d'implémenter un ContentObserver pour le fournisseur de contenu CallLog.Calls. Je veux dire, si je fais un appel, ou recevoir un appel, etc, l'observateur doit m'aviser que le fournisseur de contenu CallLog.Calls a changé. Mais la méthode onchange ne renvoie que false, même avec les observateurs enregistrés, et notifiée. Peut-être que je fais quelque chose de mal.Android ContentObserver onChange() ne renvoie que false

Ceci est mon code. C'est une activité.

package com.psyhclo; 


public class RatedCalls extends ListActivity { 

private static final String LOG_TAG = "RatedCallsObserver"; 
private Handler handler = new Handler(); 
private RatedCallsContentObserver callsObserver = null; 
private SQLiteDatabase db; 
private CallDataHelper dh = null; 
StringBuilder sb = new StringBuilder(); 
OpenHelper openHelper = new OpenHelper(RatedCalls.this); 

class RatedCallsContentObserver extends ContentObserver { 
    public RatedCallsContentObserver(Handler h) { 
     super(h); 
    } 

    public void onChange(boolean selfChange) { 
     Log.d(LOG_TAG, "RatedCallsContentObserver.onChange(" + selfChange 
       + ")"); 
    } 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    registerContentObservers(); 
    fillList(); 
} 

@Override 
public void onStart() { 

    super.onStart(); 
    registerContentObservers(); 

} 

@Override 
public void onStop() { 

    super.onStop(); 
    unregisterContentObservers(); 

} 

private void fillList() { 

    Cursor cursor = getContentResolver().query(
      android.provider.CallLog.Calls.CONTENT_URI, null, null, null, 
      android.provider.CallLog.Calls.DATE + " DESC "); 

    cursor.setNotificationUri(getBaseContext().getContentResolver(), 
      android.provider.CallLog.Calls.CONTENT_URI); 

    dh = new CallDataHelper(this); 
    db = openHelper.getWritableDatabase(); 

    startManagingCursor(cursor); 
    int numberColumnId = cursor 
      .getColumnIndex(android.provider.CallLog.Calls.NUMBER); 
    int durationId = cursor 
      .getColumnIndex(android.provider.CallLog.Calls.DURATION); 
    int contactNameId = cursor 
      .getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME); 
    int dateId = cursor.getColumnIndex(android.provider.CallLog.Calls.DATE); 
    int numTypeId = cursor 
      .getColumnIndex(android.provider.CallLog.Calls.CACHED_NUMBER_TYPE); 
    // int contactIdColumnId = 
    // cursor.getColumnIndex(android.provider.ContactsContract.RawContacts.CONTACT_ID); 

    Date dt = new Date(); 
    int hours = dt.getHours(); 
    int minutes = dt.getMinutes(); 
    int seconds = dt.getSeconds(); 
    String currTime = hours + ":" + minutes + ":" + seconds; 

    ArrayList<String> callList = new ArrayList<String>(); 
    if (cursor.moveToFirst()) { 

     do { 

      String contactNumber = cursor.getString(numberColumnId); 
      String contactName = cursor.getString(contactNameId); 
      String duration = cursor.getString(durationId); 
      String callDate = DateFormat.getDateInstance().format(dateId); 
      String numType = cursor.getString(numTypeId); 

      ContentValues values = new ContentValues(); 

      values.put("contact_id", 1); 
      values.put("contact_name", contactName); 
      values.put("number_type", numType); 
      values.put("contact_number", contactNumber); 
      values.put("duration", duration); 
      values.put("date", callDate); 
      values.put("current_time", currTime); 
      values.put("cont", 1); 

      getBaseContext().getContentResolver().notifyChange(
        android.provider.CallLog.Calls.CONTENT_URI, null); 
      this.db.insert(CallDataHelper.TABLE_NAME, null, values); 

      Toast.makeText(getBaseContext(), "Inserted!", Toast.LENGTH_LONG); 
      callList.add("Contact Number: " + contactNumber 
        + "\nContact Name: " + contactName + "\nDuration: " 
        + duration + "\nDate: " + callDate); 

     } while (cursor.moveToNext()); 
    } 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.listitem, 
      callList)); 
    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      Toast.makeText(getApplicationContext(), 
        ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 

} 

private void registerContentObservers() { 
    ContentResolver cr = getContentResolver(); 
    callsObserver = new RatedCallsContentObserver(handler); 
    cr.registerContentObserver(android.provider.CallLog.Calls.CONTENT_URI, 
      true, callsObserver); 
} 

private void unregisterContentObservers() { 

    ContentResolver cr = getContentResolver(); 
    if (callsObserver != null) { // just paranoia 
     cr.unregisterContentObserver(callsObserver); 
     callsObserver = null; 
    } 

} 
} 

Répondre

Questions connexes