我怎样才能推出Moto 360'议程'来自表盘的app(或任何其他日历)?

时间:2016-03-12 22:43:02

标签: wear-os moto-360

我是android的新手(更不用说安卓了),我的表盘点击处理程序中有这样的东西:

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);

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

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

3 个答案:

答案 0 :(得分:2)

听起来这些应用程序的Wear组件不支持标准日历Intent,就像他们的手持设备组件(可能)一样。很可能开发人员还没有充分考虑到其他人(比如你自己)想要在手表上做这件事。

您可以使用adb从手表中拉出相应的APK,然后在其上运行apktool以提取人类可读的清单,从而对此进行检查。查看它们包含的<intent>元素应该告诉您两者:

  • 如果他们支持支持标准CalendarContract,那么在您调用它时会出现问题。
  • 如果没有,也许他们会发布一些你可以打电话的其他Intent

答案 1 :(得分:1)

String's answer绝对是更正确的做法。但是,在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);

努力实现你的目标。

警告:以这种方式启动任何应用实际上是在寻找麻烦。请注意,其他应用程序可以更改程序包名称,可以重命名活动等,这些都会破坏启动活动的方式。但是,如果没有通过通用Intent启动所需应用程序的好方法,这可能是一种方法。

答案 2 :(得分:1)

I followed String's suggestion and managed to get it working by calling:

Intent calendarIntent = new Intent();
calendarIntent.setAction(Intent.ACTION_MAIN);
calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR);
startActivity(calendarIntent);