从我的问题中可以清楚地看出,我希望从前台服务启动活动。在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"
/>
发布于 2020-10-15 13:44:22
从android 10开始,在大多数情况下,不可能从后台服务打开您的活动,因为他们添加了许多限制,以便为用户提供更好的体验。
以下是限制的例外情况
应用程序有一个可见的窗口,比如前台的活动。应用程序在前台任务的后端堆栈中有一个活动。该应用程序在“最近”屏幕上的现有任务的后栈中有一个活动。这个应用程序在最近的一个活动中调用了finish()。这仅适用于应用程序在调用finish()时在前台任务的前台或后端堆栈中有活动的情况。该应用程序有一个由系统绑定的服务。此条件仅适用于可能需要启动UI的以下服务: AccessibilityService、AutofillService、CallRedirectionService、HostApduService、InCallService、TileService、VoiceInteractionService和VrListenerService。该应用程序有一个由不同的、可见的应用程序绑定的服务。请注意,绑定到服务的应用程序必须保持可见,以便应用程序在后台成功启动活动。应用程序从系统接收通知PendingIntent。在服务和广播接收器的待定意图的情况下,应用程序可以在待定意图发送后启动几秒钟的活动。该应用程序接收从另一个可见的应用程序发送的PendingIntent。应用程序接收系统广播,预计应用程序将在其中启动UI。示例包括ACTION_NEW_OUTGOING_CALL和SECRET_CODE_ACTION。该应用程序可以在广播发送后启动几秒钟的活动。该应用程序通过CompanionDeviceManager应用程序接口与配套的硬件设备相关联。此API允许应用程序启动活动,以响应用户在配对设备上执行的操作。该应用程序是在设备所有者模式下运行的设备策略控制器。示例用例包括完全托管的企业设备,以及数字标牌和自助服务亭等专用设备。该应用程序已被用户授予SYSTEM_ALERT_WINDOW权限。
此处的是同一 Exceptions to the restriction的参考链接
https://stackoverflow.com/questions/64222576
复制相似问题