run*_*r49 9 android android-4.0-ice-cream-sandwich
通过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)
Run Code Online (Sandbox Code Playgroud)
这是我现在的工作.有没有更好的办法?如果用户看到一段时间内正在运行的服务,并且经常会将其杀死以节省电池寿命.
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
}
};
}
Run Code Online (Sandbox Code Playgroud)
我使用静态单例类(您也可以扩展Application),使用方法为不同的提供程序(如日历提供程序)注册/取消注册多个观察者.我将它存储在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));
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个清单声明:
<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>
Run Code Online (Sandbox Code Playgroud)
将捕获ICS中事件和日历的更改.如果您使用的是旧的未记录的日历提供程序,则唯一的解决方案是静态类或服务中的ContentObserver.
| 归档时间: |
|
| 查看次数: |
4355 次 |
| 最近记录: |