我想实施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