WearableCalendarContract返回一些空字段

时间:2017-05-17 00:04:19

标签: android wear-os android-calendar

我制作了一个Android Wear表盘,它具有使用WearableCalendarContract检索日历事件的功能。 从几天前开始,它现在返回有关开始/停止分钟和开始/停止日期的字段中的空数据,我无法再次使用。

代码如下所示:

private final String[] PROJECTION = {
                CalendarContract.Calendars._ID,         // 0
                CalendarContract.Instances.TITLE,       // 1
                CalendarContract.Instances.START_MINUTE,// 2
                CalendarContract.Instances.END_MINUTE,  // 3
                CalendarContract.Instances.ALL_DAY,     // 4
                CalendarContract.Instances.START_DAY,   // 5
                CalendarContract.Instances.END_DAY,     // 6
                CalendarContract.Events.DISPLAY_COLOR,  // 7
                CalendarContract.Instances.DESCRIPTION, // 8debug
                CalendarContract.Instances.DTSTART,
                CalendarContract.Instances.DTEND,
                CalendarContract.Instances.CALENDAR_TIME_ZONE,
                CalendarContract.Instances.DURATION
        };

private List<CalEvent> queryEvents() {
            List<CalEvent> events = new ArrayList<>();
            long begin = currentTimeMillis();
            Log.d(TAG, "********** In queryEvents **********");
            Uri.Builder builder = WearableCalendarContract.Instances.CONTENT_URI.buildUpon();
            ContentUris.appendId(builder, begin);
            ContentUris.appendId(builder, begin + DateUtils.DAY_IN_MILLIS / 2); // 12 hours ahead

            final Cursor cursor = getContentResolver()
                    .query(builder.build(),
                            PROJECTION,
                            null, // selection (all)
                            null, // selection args
                            null);


            // get the start and end time, and the color
            while (cursor != null && cursor.moveToNext()) {
                String title = cursor.getString(1);
                int startMinute = cursor.getInt(2);
                int endMinute = cursor.getInt(3);
                int allDay = cursor.getInt(4);
                int startDay = cursor.getInt(5);
                int endDay = cursor.getInt(6);
                int color = cursor.getInt(7);
                Log.d(TAG, "********** Title: " + title + ", start: " + startMinute + ", end: " + endMinute);
                for (int i = 0; i < cursor.getColumnCount(); i++) {
                    Log.d(TAG, "********** cursor.isNull(" + i + ") = " + cursor.isNull(i));
                }
                events.add(new CalEvent(title, startMinute, endMinute, allDay, startDay, endDay, color));
            }

            cursor.close();
            Log.d(TAG, "********** QueryEvents: Read " + events.size() + " events");
            Collections.sort(events);
            return events;
        }

第一个事件的结果(其余部分的空字段完全相同),为什么重要的时间相关字段都为空?

********** In queryEvents **********
********** Title: Test event, start: 0, end: 0
********** cursor.isNull(0) = false
********** cursor.isNull(1) = false
********** cursor.isNull(2) = true
********** cursor.isNull(3) = true
********** cursor.isNull(4) = false
********** cursor.isNull(5) = true
********** cursor.isNull(6) = true
********** cursor.isNull(7) = true
********** cursor.isNull(8) = false
********** cursor.isNull(9) = true
********** cursor.isNull(10) = true
********** cursor.isNull(11) = true
********** cursor.isNull(12) = true

在我的清单文件中 <uses-permission android:name="android.permission.READ_CALENDAR" />并且它也被授予了手表。 这个功能自2个月以来一直运行良好,当我5月6日发布时,当前版本肯定有效。我怀疑4天前最新的Android Wear更新,但由于我还没有找到其他人报告此问题,这可能是我自己的错... 非常感谢任何输入!

谢谢 Torkel

2 个答案:

答案 0 :(得分:1)

我从Wear团队那里得到了一个答案:

嗨Torkel!感谢明确的错误报告。最近进行了此更改以减少设备之间同步的数据量。从最新版本的Wear Companion复制的字段是:

def set_marker(player,board):
    print "\nplayer",player

    x = y = 3
    while(x == 3 or board[x][y] != 0):
        while(x not in range(0,3)):
            x = input("x: ")
        while(y not in range(0,3)):    
            y = input("y: ")

        if board[x][y] == 0:
            board[x][y]=player
            return board

应该可以从这个子集中推断出你需要的数据,但如果不是这样的话,请回复。

我要看看我们是否可以获得有关在我们的公共文档中更明确指定哪些字段的文档。

问题链接:https://issuetracker.google.com/issues/38476499

答案 1 :(得分:0)

正如博客中所述 - WearableCalendarContract vs. CalendarContract

  

WearableCalendarContract仅为您提供 AUTHORITY CONTENT_URI ,因为您可以从原始 CalendarContract 获得所有其他常量。我们尽量减少使用CalendarContract的变化。

尝试使用CalendarContract代替WearableCalendarContract,以获取除授权和内容Uri之外的详细信息(顶级可穿戴日历授权机构的内容://样式网址。)

希望这有帮助。