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

Android Kotlin实现定时自动启动其他APP问题求助

解决Android定时启动其他APP的问题

1. 修复代码语法错误

你的MainActivity.kt存在语法错误,多余的milliseconds会导致编译失败,修改为:

val openTimeMillis = System.currentTimeMillis() + (6 * 1000)

2. 注册BroadcastReceiver到Manifest

必须在AndroidManifest.xml中注册AppOpenReceiver,否则系统无法识别该广播接收器:

<receiver
    android:name=".AppOpenReceiver"
    android:exported="false" />

3. 适配Android 10+的后台启动限制

从Android 10(API 29)开始,后台应用启动Activity有严格限制,直接调用startActivity大概率失败。推荐直接使用PendingIntent.getActivity替代广播方案,简化流程同时规避限制:

fun scheduleAppOpenAndClose(context: Context, openTimeMillis: Long) {
    val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
    // 获取Chrome的启动Intent,若未安装则直接返回
    val launchIntent = context.packageManager.getLaunchIntentForPackage("com.android.chrome")?.apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK
    } ?: return

    val pendingIntent = PendingIntent.getActivity(
        context,
        0,
        launchIntent,
        PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
    )

    // 适配不同Android版本的闹钟触发逻辑
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        alarmManager.setExactAndAllowWhileIdle(
            AlarmManager.RTC_WAKEUP,
            openTimeMillis,
            pendingIntent
        )
    } else {
        alarmManager.setExact(
            AlarmManager.RTC_WAKEUP,
            openTimeMillis,
            pendingIntent
        )
    }
}

4. 添加并请求必要权限

在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

针对API 31+版本,需要动态请求精确闹钟权限:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // 检查并请求精确闹钟权限(API 31+)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
        if (!alarmManager.canScheduleExactAlarms()) {
            startActivity(Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
        }
    }

    val openTimeMillis = System.currentTimeMillis() + 6000
    scheduleAppOpenAndClose(this, openTimeMillis)
}

5. 适配Doze模式

设备进入Doze模式时,普通的setExact不会触发,setExactAndAllowWhileIdle可以在Doze模式下正常执行,这也是上述代码中适配API 31+的核心原因。

验证要点

  • 确保目标应用(如Chrome)已安装在测试设备上
  • 运行应用时授予所有必要权限
  • 等待设定时间,检查目标应用是否正常启动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:36