在Android 10中,当手机锁定且屏幕关闭时,如何从ForegroundService打开活动?

时间:2020-10-06 09:02:35

标签: android-activity service android-10.0 foreground screen-lock

从我的问题显而易见,我希望从前台服务开始活动。 在android 5-9中它将启动,但是在android 10中有限制,我不知道该怎么办!

这是需要开始的活动:

public class Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm_time);

        // Important: have to do the following in order to show without unlocking
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    }
}

并显示:

<activity android:name=".Activity"
    android:showOnLockScreen="true"
    android:screenOrientation="portrait"
    android:autoRemoveFromRecents="true"
    android:excludeFromRecents="true"
/>

1 个答案:

答案 0 :(得分:0)

在大多数情况下,从android 10开始,无法从后台服务打开您的活动,因为它们添加了许多限制,以便为用户提供更好的体验。

以下是该限制的例外情况

该应用程序有一个可见的窗口,例如前台的活动。 该应用程序在前台任务的后堆栈中具有活动。 该应用程序在“最近”屏幕上的现有任务的后堆栈中具有活动。

该应用程序最近在某个活动上名为finish()。这仅在应用程序在调用finish()时在前台中有活动或前台任务的后堆栈中有活动时适用。

该应用程序具有受系统约束的服务。此条件仅适用于以下服务,可能需要启动UI:AccessibilityService,AutofillService,CallRedirectionService,HostApduService,InCallService,TileService,VoiceInteractionService和VrListenerService。

该应用程序具有与其他可见应用程序绑定的服务。请注意,绑定到服务的应用必须在后台保持可见状态,以便成功启动活动。

该应用收到来自系统的通知PendingIntent。对于服务和广播接收器的待定意图,该应用程序可以在发送待定意图后几秒钟开始活动。

该应用接收到一个PendingIntent,该PendingIntent是从另一个可见的应用发送的。

该应用会收到系统广播,预计该应用会启动UI。示例包括ACTION_NEW_OUTGOING_CALL和SECRET_CODE_ACTION。发送广播后,该应用程序可以开始活动几秒钟。

该应用通过CompanionDeviceManager API与配套的硬件设备关联。此API允许该应用启动活动,以响应用户在配对设备上执行的操作。

该应用是在设备所有者模式下运行的设备策略控制器。用例示例包括完全托管的企业设备以及数字标牌和信息亭等专用设备。

该应用已被用户授予SYSTEM_ALERT_WINDOW权限。

这是相同的参考链接 Exceptions to the restriction