2012-07-14 79 views
2

我試圖在聯繫人表被更改時提取聯繫人。它工作正常,但現在不起作用。它只能工作幾次。我正在使用ContentObserver來獲取事件。Android - ContentObserver未被調用

以下是註冊ContentObserver的代碼。我在服務上註冊,以便不斷收聽。

public void onCreate() { 
    super.onCreate(); 
    context = this; 
    db = new Database(context); 
    Log.i("**********", "Started Service!"); 

    Contacts contacts = new Contacts(context); 
    context.getContentResolver().registerContentObserver (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, true, contacts); 

} 

而這裏的代碼時,我提取聯繫人的名字和這個塞入:

public void onChange(boolean selfChange) { 
    super.onChange(selfChange); 
    Log.i("********","*****"); 
    db = new Database(co); 
    db.open(); 
    if (db.Preferences(3) && new CheckConexion().isOnline(co)) { 
     Cursor phones = co.getContentResolver().query(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
       null, null, null); 

     while (phones.moveToNext()) { 
      try { 
       name = phones 
         .getString(phones 
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
       phoneNumber = phones 
         .getString(phones 
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

       JSONObject jobject = db.select_contact(name, phoneNumber); 

       String type1 = jobject.getString("type"); 

       if (type1.equals("upload")) { 
        if (!(name.equals("") && phoneNumber.equals(""))) { 
         JSONObject jobject2 = new JSONObject(); 
         jobject2.put("name", name); 
         jobject2.put("phone", phoneNumber); 

         String value_json = String.valueOf(jobject2); 
         upload(value_json, co); 
         Log.i("********", "Upload on the db" + name + " " 
           + phoneNumber); 
        } 

       } else { 
        return; 
       } 

      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 
     db.close(); 
    } else { 
     db.close(); 
    } 

} 

回答

0

的onCreate()被調用只有一次,當它啓動的第一次的服務。如果您一次又一次地啓動服務,那麼將直接調用onStartCommand()。因此,我覺得它的觀察員註冊沒有被保留,並且正在迷路。