如何从表盘启动 Moto 360 'Agenda' 应用程序(或任何其他日历)?
How can I launch the Moto 360 'Agenda' app (or any other calendar) from a watchface?
我是 android(更不用说 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);
点击时我收到 没有应用程序可以处理此操作 消息。
当然,Agenda 应用程序就在那里,我还安装了一些其他日历应用程序(例如 google)。
听起来这些应用程序的 Wear 组件不支持标准日历 Intent
,就像他们的手持组件(大概)支持的那样。开发人员很可能只是没有充分考虑到其他人(比如您)会想要在手表上这样做。
您可以通过使用 adb 从手表中拉出相应的 APK 来具体检查这一点,然后 运行 apktool 在它们上提取人类可读的清单。查看它们包含的 <intent>
元素应该告诉你:
- 如果他们确实支持标准
CalendarContract
,在这种情况下,您的称呼方式有问题。
- 如果没有,也许他们会发布一些您可以调用的其他
Intent
。
一般来说, 绝对是更正确的做法。但是,在 Moto360 上,我查看了启动 Agenda 应用程序时启动的 activity。从那开始,我设法获得了代码:
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
s 启动您想要的应用程序,这可能是一种方法。
我关注了 并设法通过调用使其工作:
Intent calendarIntent = new Intent();
calendarIntent.setAction(Intent.ACTION_MAIN);
calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR);
startActivity(calendarIntent);
我是 android(更不用说 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);
点击时我收到 没有应用程序可以处理此操作 消息。
当然,Agenda 应用程序就在那里,我还安装了一些其他日历应用程序(例如 google)。
听起来这些应用程序的 Wear 组件不支持标准日历 Intent
,就像他们的手持组件(大概)支持的那样。开发人员很可能只是没有充分考虑到其他人(比如您)会想要在手表上这样做。
您可以通过使用 adb 从手表中拉出相应的 APK 来具体检查这一点,然后 运行 apktool 在它们上提取人类可读的清单。查看它们包含的 <intent>
元素应该告诉你:
- 如果他们确实支持标准
CalendarContract
,在这种情况下,您的称呼方式有问题。 - 如果没有,也许他们会发布一些您可以调用的其他
Intent
。
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
s 启动您想要的应用程序,这可能是一种方法。
我关注了
Intent calendarIntent = new Intent();
calendarIntent.setAction(Intent.ACTION_MAIN);
calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR);
startActivity(calendarIntent);