Android 14锁屏下如何用PendingIntent调用startActivityAndCollapse?
解决Android 14锁屏下通过PendingIntent启动TileService Activity需解锁的问题
要在使用startActivityAndCollapse(PendingIntent)时实现锁屏直接显示Activity,需要从Intent配置、Activity清单声明和Activity内部设置三个方面调整:
1. 调整启动Intent的Flag
在创建启动MainActivity的Intent时,显式添加FLAG_ACTIVITY_SHOW_WHEN_LOCKED,确保系统允许锁屏状态下启动该Activity:
Intent intent = new Intent(this.getApplicationContext(), MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SHOW_WHEN_LOCKED);
2. 在Manifest中配置Activity的锁屏显示权限
给MainActivity添加锁屏相关的清单属性,明确允许其在锁屏状态下显示:
<activity android:name=".MainActivity" android:showWhenLocked="true" android:showOnLockScreen="true" android:turnScreenOn="true"> <!-- 可选:如果需要点击Tile时自动点亮屏幕 --> <!-- 其他原有配置 --> </activity>
3. 完善MainActivity的锁屏显示逻辑
在MainActivity的onCreate方法中,补充覆盖不同Android版本的锁屏显示兼容代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { setShowWhenLocked(true); setTurnScreenOn(true); // 可选:自动点亮屏幕 } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON ); } else { getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } }
4. 保持PendingIntent的正确创建
确保PendingIntent使用FLAG_IMMUTABLE(Android 12+推荐标准),无需修改现有创建逻辑:
PendingIntent pendingIntent = PendingIntent.getActivity( appContext, 0, intent, PendingIntent.FLAG_IMMUTABLE ); this.startActivityAndCollapse(pendingIntent);
经过以上调整,点击快捷设置Tile后,MainActivity就能在Android 14的锁屏状态下直接显示,无需解锁设备。
内容的提问来源于stack exchange,提问作者fe60
相关产品推荐
相关产品推荐

