作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有了 ICS,我们现在有了用于日历的 API! :)
我的问题是,我们如何确定事件是否已更新。理想情况下,这可以通过 BroadcastReceiver 来完成,但我认为没有一个可以公开访问的。广播了一些事件,但我认为非系统应用程序无法访问它。
02-06 23:05:05.316: I/CalendarProvider2(9201): Sending notification intent: Intent { act=android.intent.action.PROVIDER_CHANGED dat=content://com.android.calendar }
02-06 23:05:05.320: W/ContentResolver(9201): Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)
这是我目前的工作。有没有更好的办法?如果用户看到一项服务运行了很长时间,他们可能会感到不安,并且通常会终止它以节省电池生命周期。
public class CalendarUpdatedService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int returnValue = super.onStartCommand(intent, flags, startId);
getContentResolver().registerContentObserver(
CalendarContract.Events.CONTENT_URI, true, observer);
return returnValue;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
ContentObserver observer = new ContentObserver(new Handler()) {
@Override
public boolean deliverSelfNotifications() {
return true;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//code goes here to update
}
};
}
最佳答案
我使用静态单例类(您也可以扩展应用程序),其中包含为不同提供者(例如日历提供者)注册/取消注册多个观察者的方法。我将其存储在 HashMap 中,以便我可以确定稍后注册了哪些观察者。
很丑,但似乎没有更好的解决方案。
编辑这个接收器:
public class CalendarChangedReceiver extends BroadcastReceiver {
private static final String TAG = "CalendarChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "calendar changed! "+intent.toUri(Intent.URI_INTENT_SCHEME));
}
}
有了这个 list 声明:
<receiver android:name=".CalendarChangedReceiver">
<intent-filter>
<action android:name="android.intent.action.PROVIDER_CHANGED"/>
<data android:scheme="content"/>
<data android:host="com.android.calendar"/>
</intent-filter>
</receiver>
将捕获 ICS 中事件和日历的更改。如果您使用旧的未记录的日历提供程序,唯一的解决方案是静态类或服务中的 ContentObserver。
关于android - 当日历同步新事件时,处理更新的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170903/
我是一名优秀的程序员,十分优秀!