如何从外部打开Android Outlook应用程序



我目前正在开发一个Android应用程序,以显示主屏幕小部件。这些与Microsoft Outlook(事件+消息(相关,以便在一种动态磁贴中显示传入事件和未读新消息。

Msal 图形库帮助我在包含每个事件/消息结果的标识符的编队中进行身份验证和检索

但是现在我想知道Outlook应用程序是否安装在用户设备上,以及当用户单击小部件时是否有办法打开Outlook。此外,如果用户能够打开相应的点击事件或消息,则带有标识符。

例如,当前显示生日事件的"事件"小组件。用户单击它。然后它打开Outlook并直接显示该生日事件。

问候

我认为这在某处没有正式记录。但这是您可以做些什么来了解它。

您可以列出设备上安装的所有Microsoft应用程序...

val packages = context.packageManager
.getInstalledApplications(PackageManager.GET_META_DATA)
for (info in packages) {
if(info.packageName.startsWith("com.microsoft", true)){
Log.d("package name:" + info.packageName)
Log.d("Launch Activity: " + context.packageManager.getLaunchIntentForPackage(info.packageName))
}
}

记下 LogCat 中显示的"启动意图"。您可以使用它来启动Outlook。只需确保不要对这些值进行硬编码,因为Microsoft可以随时更改这些值,例如活动类可以更改。所以,与其这样做...

context.startActivity(
Intent().apply {
action = Intent.ACTION_MAIN
addCategory(Intent.CATEGORY_LAUNCHER)
setPackage("com.microsoft.office.outlook")
component = ComponentName("com.microsoft.office.outlook", "com.microsoft.office.outlook.MainActivity")
}
)

这样做...

context.startActivity(
Intent().apply {
action = Intent.ACTION_MAIN
addCategory(Intent.CATEGORY_LAUNCHER)
component = ComponentName(
outlookLaunchIntent?.component?.packageName, 
outlookLaunchIntent?.component?.className
)
setPackage(outlookLaunchIntent.package)
}
)

另外,请记住,getLaunchIntentForPackagecomponent可以返回 null,因此请确保正确检查 null 值

我正在传达几个内部人员的建议:

请尝试使用以下 URL 之一打开活动:

  1. ms-outlook://events/open?restid=%s&account=test@om.com(如果您有常规的 REST ID(

  2. MS-outlook://events/open?immutableid=%s&account=test@om.com(如果您使用的是不可变 ID(

由于不可变 ID 在 Microsoft Graph 中仍处于预览阶段,并且客户不应在其生产应用程序中使用预览 API,因此我认为选项 #1 适用于您的情况。

如果URL有效,如果您有其他相关问题,请在此处回复。我要求这对夫妇也关注这个线程。

好吧,我设法在您的代码@Leo的帮助下打开了Outlook Android应用程序。由于我没有使用 Kotlin 开发,因此请发布下面的 JAVA 代码:

Intent outlookLaunchIntent =  context.getPackageManager().getLaunchIntentForPackage("com.microsoft.office.outlook");
if (outlookLaunchIntent  != null) {
context.startActivity(outlookLaunchIntent );
}

下面的代码在图形 API 的 webLink 属性提供的 Web 浏览器中打开事件/消息。(我只测试事件,提供的网址不起作用。我为此在StackOverFlow上发布了一个新问题,但您已经在那里看到了问题:https://github.com/microsoftgraph/microsoft-graph-docs/issues/4203

try {
Intent webIntent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(calendarWebLink));
webIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(webIntent);
} catch (RuntimeException e) {
// The url is invalid, maybe missing http://
e.printStackTrace();
}

但是,我仍然坚持我的小部件项目单击的合理目标,即在Microsoft Outlook Android应用程序中打开相关事件/电子邮件。

Microsoft Outlook Android应用程序包含小部件,可以实现我正在寻找的内容。所以我想知道是否可以列出它的广播接收器。

我发现的最好的东西是该应用程序的旧清单,但它对我没有帮助。 https://gist.github.com/RyPope/df0e61f477af4b73865cd72bdaa7d8c2

嗨,您可以尝试使用以下网址之一打开事件:

  • ms-outlook://events/open?restid=%s&account=test@om.com(如果 用户具有 REST ID(
  • ms-outlook://events/open?immutableid=%s&account=test@om.com(如果 用户具有不可变 ID(

最新更新