0

我是 android(更不用说 android wear)开发的新手,我的表盘水龙头处理程序中有这样的东西:

Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
builder.appendPath("time");
ContentUris.appendId(builder, startMillis);
Intent intent = new Intent(Intent.ACTION_VIEW)
    .setData(builder.build())
    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

在点击我得到没有应用程序可以处理此操作消息。

当然,议程应用程序在那里,我已经安装了一些其他的日历应用程序(例如谷歌)。

4

3 回答 3

2

听起来这些应用程序的 Wear 组件不像Intent他们的手持组件(大概)那样支持标准日历。开发人员很可能只是没有充分考虑到其他人(比如您自己)会想要在手表上执行此操作。

您可以通过使用 adb 从手表上拉出相应的 APK 来专门检查这一点,然后在它们上运行apktool以提取人类可读的清单。查看<intent>它们包含的元素应该告诉你:

  • 如果他们确实支持标准CalendarContract,那么在这种情况下,您的调用方式就有问题。
  • 如果没有,也许他们会发布一些Intent您可以调用的其他内容。
于 2016-03-13T13:55:01.537 回答
1

一般来说,字符串的答案绝对是更正确的方法。但是,在 Moto360 上,我查看了启动 Agenda 应用程序时正在启动的活动。从那开始,我设法得到了代码:

ComponentName component = new ComponentName("com.google.android.wearable.app", "com.google.android.clockwork.home.calendar.AgendaActivity");
Intent intent = new Intent()
    .setComponent(component)
    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

努力实现你所追求的。

警告:以这种方式启动任何应用程序实际上是在自找麻烦。请注意,其他应用程序可以更改包名称,可以重命名活动等,这些都会破坏这种启动活动的方式。但是,如果无法使用 generic 启动您想要的应用程序的好方法Intent,这可能是一种方法。

于 2016-03-14T20:18:20.580 回答
1

我听从了String 的建议,并设法通过调用:

Intent calendarIntent = new Intent();
calendarIntent.setAction(Intent.ACTION_MAIN);
calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR);
startActivity(calendarIntent);
于 2016-07-11T19:31:14.207 回答