gpt4 book ai didi

android - 当日历同步新事件时,处理更新的最佳方式是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:40 27 4
gpt4 key购买 nike

有了 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com