2012-04-12 5 views
3

Ich versuche nur, die Android-Dienste und Inhalte Beobachter zu verstehen.android Registrierung für Content-Beobachter von einem Service

Also versuchte ich ein Programm, wo meine Aktivität einen Dienst startet und im Dienst registriere ich zu CONTACTS URI, um benachrichtigt zu werden, wenn sich die Kontakte db ändern.

Ich rum mein Programm und ich kann sehen, dass dieser Dienst unter Anwendungen kommt -> laufende Dienste. Jetzt versuche ich einen Kontakt hinzuzufügen und mein Beobachter wird benachrichtigt. Wenn ich den Kontakt erneut bearbeite, wird er nicht benachrichtigt.

public class ContactChangeOberverServiceActivity extends Activity { 
    /** Called when the activity is first created. */ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Log.i("Start","Service"); 
     startService(new Intent(this, MyService.class)); 
    } 
} 

der Service:

public class MyService extends Service { 

    private static final String TAG = "MyService"; 

    @Override 
    public void onCreate() { 
     Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onCreate"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d(TAG, "onStart"); 
     ContactObserverActivity observer = new ContactObserverActivity(new Handler()); 
     observer.register(getApplicationContext()); 
     return super.onStartCommand(intent, flags, startId); 
    } 

    public boolean deliverSelfNotifications() { 
     return true; 
    } 
} 
Es ist nur das erste Mal nach meinem Programm ausgeführt wird, wenn ich Kontakte bearbeiten, der Inhalt Beobachter Bitte sehen meinen Code Details unten

Mainactivity, um den Dienst zu starten benachrichtigt

Und der Beobachter:

@Override 
public void onChange(boolean selfChange) { 
    // TODO Auto-generated method stub 
    // super.onChange(selfChange); 
    Log.e(TAG, "Onchange Called"); 
    //MainActivity.takeContactBackup(); 
    Intent intent = new Intent (ctx,ContactsExtractorActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    ctx.startActivity(intent); 
} 

/TODO Auto-generated constructor stub 
} 

public void register(Context ctx) { 
    Log.e(TAG, "Registering"); 
    this.ctx = ctx; 
    curval = ctx.getContentResolver().query(
      ContactsContract.Contacts.CONTENT_URI, projection, null, null, 
      null); 
    curval.registerContentObserver(new ContactObserverActivity(
      new Handler())); 
    Log.e(TAG, "Registered"); 
} 

Bitte helfen Sie mir, dieses Verhalten und die Lösung dafür zu verstehen. Danke.

+0

Ich habe das gleiche Problem haben Sie dieses Problem behoben? – PrvN

Antwort

0

mit dieser URI:

ContactsContract.CommonDataKinds.Phone.CONTENT_URI

für mich gearbeitet!