Android 在后台无法启动Activity

前言

前几天接触的一个闹钟APP项目,闹钟触发从后台启动一个activity,执行之后的响铃操作,但是却失效了,闹钟并没有按时响铃。最后发现是系统拦截了从后台启动的Activity。

具体原因

  • 一、AndroidQ从后台启动Activity的限制
    Android 10 (API 级别 29) 及更高版本对后台应用可启动 Activity进行限制。Android10中, 当App的Activity不在前台时,其启动Activity会被系统拦截,导致无法启动。

  • 二、后台弹出界面、锁屏显示权限(小米等部分国产手机)
    小米手机有个特殊的权限,“后台弹出界面(允许应用在后台弹出界面)”,默认是拒绝的,如下图所示.
    Android 在后台无法启动Activity_第1张图片
    华为手机没有这个权限,目前vivo/oppo/小米手机有这个“后台弹出界面”权限.

  • 其他原因,有待更新,暂时没有遇见

解决方案

  • 一、针对Android10的问题

    方案1
    官方给予的折中方案是使用全屏Intent(full-screen intent), 既创建通知栏通知时, 加入full-screen intent 设置。示例代码如下(基于官方文档修改):

Intent fullScreenIntent = new Intent(this, CallActivity.class);
PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0,
        fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT);
 
NotificationCompat.Builder notificationBuilder =
        new NotificationCompat.Builder(this, CHANNEL_ID

你可能感兴趣的:(android,移动开发)