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

Pre*_*pha 5 outlook android android-intent microsoft-graph azure-ad-msal

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

Msal图形库对我进行身份验证和检索的形式有很大帮助,其中包含每个事件/消息结果的标识符

但是现在我想知道用户设备上是否安装了Outlook应用程序,以及当用户单击窗口小部件时是否可以打开Outlook。此外,用户是否可以打开带有标识符的相应单击事件或消息。

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

问候

Leo*_*Leo 5

我不认为这在某处有正式记录。但您可以通过以下方法来了解它。

您可以列出设备上安装的所有 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))
            }
        }
Run Code Online (Sandbox Code Playgroud)

记下 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")
            }
        )
Run Code Online (Sandbox Code Playgroud)

做这个...

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

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


小智 5

我转达一些内部人士的建议:

请尝试使用以下 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 有效或无效,以及您是否还有其他相关问题,请在此处回复。我请求这对夫妇也关注这个帖子。