You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13如何创建启动日历应用的Intent?解决启动异常问题

Android 13中启动日历应用的替代方案

你遇到的ActivityNotFoundException是因为直接指定了固定包名com.android.calendar,但不同厂商定制的Android系统会使用不同的日历应用包名(比如谷歌日历是com.google.android.calendar,三星日历是com.samsung.android.calendar),且Android 13新增的应用可见性限制也会导致无法直接找到指定包名的应用。以下是几种可靠的替代方法:

方法一:让系统自动匹配可用日历应用

移除固定包名限制,让系统筛选能处理日历URI的应用,同时提前检查避免崩溃:

private fun openCalendar() {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = CalendarContract.CONTENT_URI
        addCategory(Intent.CATEGORY_APP_CALENDAR)
    }

    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    } else {
        Toast.makeText(this, "未找到可用的日历应用", Toast.LENGTH_SHORT).show()
    }
}

方法二:直接启动日历应用主界面

如果不需要打开特定日历视图,而是直接启动日历应用首页,可使用CATEGORY_APP_CALENDAR精准匹配:

private fun openCalendarHome() {
    val intent = Intent(Intent.ACTION_MAIN).apply {
        addCategory(Intent.CATEGORY_APP_CALENDAR)
        flags = Intent.FLAG_ACTIVITY_NEW_TASK
    }

    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    } else {
        Toast.makeText(this, "未找到可用的日历应用", Toast.LENGTH_SHORT).show()
    }
}

方法三:适配Android 13应用可见性限制

在Android 13及以上系统中,应用默认无法查询其他应用的信息,需在AndroidManifest.xml中添加查询声明,确保能找到日历应用:

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="content" />
        <category android:name="android.intent.category.APP_CALENDAR" />
    </intent>
</queries>

内容的提问来源于stack exchange,提问作者liarspocker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:13:18