我想實施BroadcastReceiver
以偵聽聯繫人是否已刪除/更新。我讀了ContantObserver
,但我不知道如何在應用程序背景中運行此應用程序,如BroadcastReceiver
。如何接收聯繫人更改:Android
我該如何執行此操作?有什麼辦法可以在應用程序的背景下運行ContantObserver
。
我跟着this FAQ.
我想實施BroadcastReceiver
以偵聽聯繫人是否已刪除/更新。我讀了ContantObserver
,但我不知道如何在應用程序背景中運行此應用程序,如BroadcastReceiver
。如何接收聯繫人更改:Android
我該如何執行此操作?有什麼辦法可以在應用程序的背景下運行ContantObserver
。
我跟着this FAQ.
實現一個broadcaste接收器和在ContentObserver
的onChange
方法靶向這個接收器發送Broadcaste ..看到this使用自定義的意圖和broadcastes ..
啓動服務並註冊ContentObserver到此服務器
這是我做的一個示例代碼,它將偵聽Contacts.CONTENT_URI中的任何更改並通知用戶
這是服務
public class ContactObserverService extends Service implements ContactObserver.OnUpdate {
private ContactObserver contactObserver ;
public ContactObserverService() {
}
@Override
public void onCreate(){
super.onCreate();
contactObserver = new ContactObserver(this);
Toast.makeText(this,"Service Started",Toast.LENGTH_SHORT).show();
this.getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI,false,contactObserver);
}
@Override
public void onDestroy() {
if(contactObserver !=null )
{
this.getContentResolver().unregisterContentObserver(contactObserver);
}
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// The service is starting, due to a call to startService()
return START_STICKY;
}
@Override
public void onUpdate(Uri uri) {
NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setContentTitle("Contact Update Notifier")
.setContentText(uri.getQuery())
.setSmallIcon(R.drawable.images);
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.notify(1,builder.build());
}
}
的ContentObserver類是
public class ContactObserver extends ContentObserver {
private OnUpdate onUpdate;
public interface OnUpdate{
void onUpdate(Uri uri);
}
public ContactObserver(OnUpdate onUpdate) {
super(new Handler());
this.onUpdate = onUpdate;
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
// this is NOT UI thread, this is a BACKGROUND thread
uri.getQueryParameterNames();
onUpdate.onUpdate(uri);
}
}
我需要的是實現從應用程序的背景此功能。我的意思是我的申請不在前臺,如果聯繫已被更改,則必須通過我的申請進行審覈。我認爲ContentObserver需要在前臺運行。我對嗎? – 2012-04-18 13:30:43
@AndroidLearner ..這就是爲什麼我建議在後臺運行的接收器..和內容觀察員不必在前臺.. – ngesh 2012-04-18 13:34:40
好的謝謝你。我將執行此操作。 – 2012-04-18 14:43:53