Android I';我做了一个简单的Dashclock日历扩展,它停止了更新

Android I';我做了一个简单的Dashclock日历扩展,它停止了更新,android,service,dashclock,Android,Service,Dashclock,我正在制作一个基本的Dashclock扩展,用于轮询CalendarContract.Events以获取同步到用户设备的所有日历事件的列表,检索计划最快发生的事件,并发布时间、标题、位置和描述。这是我的密码: public class FullCalService extends DashClockExtension { public static final String[] FIELDS = { Events._ID, Events.TITLE, Events

我正在制作一个基本的Dashclock扩展,用于轮询
CalendarContract.Events
以获取同步到用户设备的所有日历事件的列表,检索计划最快发生的事件,并发布时间、标题、位置和描述。这是我的密码:

public class FullCalService extends DashClockExtension {
    public static final String[] FIELDS = { Events._ID, Events.TITLE,
            Events.ALL_DAY, Events.EVENT_LOCATION, Events.DTSTART,
            Events.EVENT_TIMEZONE, Events.DESCRIPTION };

    public FullCalService() {
    }

    @Override
    protected void onUpdateData(int arg0) {
        TimeZone tz = TimeZone.getDefault();
        long currentTimeMillis = Calendar.getInstance().getTimeInMillis() - tz.getRawOffset();
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(this);
        Cursor c;
        if (prefs.getBoolean("allDayAllowed", false)) {
            c = getContentResolver().query(
                    Events.CONTENT_URI,
                    FIELDS,
                    new StringBuilder().append("(").append(Events.DTSTART)
                            .append(" >= ?)").toString(),
                    new String[] { Long.toString(currentTimeMillis) },
                    Events.DTSTART, null);
        } else {
            c = getContentResolver().query(
                    Events.CONTENT_URI,
                    FIELDS,
                    new StringBuilder().append("((").append(Events.ALL_DAY)
                            .append("= ?) AND (").append(Events.DTSTART)
                            .append(" >= ?))").toString(),
                    new String[] { Integer.toString(0),
                            Long.toString(currentTimeMillis) }, Events.DTSTART,
                    null);
        }
        if (c.moveToFirst()) {
            long eventTimeMillis = c.getLong(c.getColumnIndex(Events.DTSTART));
//          if (tz.inDaylightTime(new Date(eventTimeMillis))) {
//              eventTimeMillis += tz.getDSTSavings();
//          }
            //Log.d("DesCal service", "Value of hoursToReveal: "+prefs.getString("hoursToReveal", "1"));
            if (eventTimeMillis < currentTimeMillis + 360000
                    * Integer.parseInt(prefs.getString("hoursToReveal", "1"))) {
                String title = c.getString(c.getColumnIndex(Events.TITLE));
                String loc = c.getString(c
                        .getColumnIndex(Events.EVENT_LOCATION));
                String time = DateUtils.formatDateTime(this, eventTimeMillis,
                        DateUtils.FORMAT_SHOW_TIME);
                String desc = c.getString(c.getColumnIndex(Events.DESCRIPTION));
                StringBuilder expandedBody = new StringBuilder(time);
                if (!loc.isEmpty()){
                    expandedBody.append(" - ").append(loc);
                }
                expandedBody.append("\n").append(desc);
                String uri = new StringBuilder(
                        "content://com.android.calendar/events/").append(
                        c.getLong(c.getColumnIndex(Events._ID))).toString();
                publishUpdate(new ExtensionData()
                        .visible(true)
                        .status(time)
                        .expandedTitle(title)
                        .expandedBody(expandedBody.toString())
                        .icon(R.drawable.ic_dash_cal)
                        .clickIntent(
                                new Intent(Intent.ACTION_VIEW, Uri.parse(uri))));
                c.close();
            } else {
                publishUpdate(new ExtensionData().visible(false));
                c.close();
            }
        } else {
            publishUpdate(new ExtensionData().visible(false));
            c.close();
        }
    }
}
公共类FullCalService扩展了DashClockExtension{
公共静态最终字符串[]字段={Events.\u ID,Events.TITLE,
Events.ALL_DAY、Events.EVENT_位置、Events.DTSTART、,
Events.EVENT_时区,Events.DESCRIPTION};
公共服务{
}
@凌驾
受保护的void onUpdate数据(int arg0){
时区tz=TimeZone.getDefault();
long currentTimeMillis=Calendar.getInstance().getTimeInMillis()-tz.getRawOffset();
SharedReferences prefs=首选项管理器
.GetDefaultSharedReferences(本文件);
光标c;
if(prefs.getBoolean(“allDayAllowed”,false)){
c=getContentResolver().query(
Events.CONTENT_URI,
领域,
新建StringBuilder().append(“”.append(Events.DTSTART)
.append(“>=?)”).toString(),
新字符串[]{Long.toString(currentTimeMillis)},
Events.DTSTART,null);
}否则{
c=getContentResolver().query(
Events.CONTENT_URI,
领域,
新建StringBuilder().append((“”).append(Events.ALL_DAY)
.append(“=?”)和(“).append(Events.DTSTART)
.append(“>=?)”).toString(),
新字符串[]{Integer.toString(0),
Long.toString(currentTimeMillis)},Events.DTSTART,
无效);
}
if(c.moveToFirst()){
long eventTimeMillis=c.getLong(c.getColumnIndex(Events.DTSTART));
//如果(tz.inDaylightTime(新日期(eventTimeMillis))){
//eventTimeMillis+=tz.getdstssavings();
//          }
//Log.d(“描述服务”,“小时存储空间值:”+prefs.getString(“小时存储空间”,“1”));
如果(eventTimeMillis

第一次安装时,它似乎工作得很好。然而,在事件开始后,它不会抓住任何未来的事件。是否存在扩展无法刷新自身的原因?

您如何触发进一步的更新?您需要手动指定何时调用
onUpdateData
,例如,内容提供商发生更改时,或屏幕打开时,等等。默认情况下,扩展仅每30分钟左右刷新一次。有关示例代码,请参阅源代码。

如何触发进一步的更新?您需要手动指定何时调用
onUpdateData
,例如,内容提供商发生更改时,或屏幕打开时,等等。默认情况下,扩展仅每30分钟左右刷新一次。查看示例代码的源代码。

老实说,即使使用默认刷新率,它似乎也不会获得新事件。我假设每次调用
onUpdateData
时都会抓取一个新的游标,但一定没有发生什么事情。老实说,即使使用默认刷新率,它似乎也不会得到新事件。我假设每次调用
onUpdateData
都会抓取一个新的游标,但肯定不会发生什么事情。