Android11以上系统有一种设置普通app实现霸屏的功能,即让系统一直停留在当前app界面,只有特殊的组合操作才能退出到其他app的界面。
开启这个功能需要先在系统设置-->安全-->更多安全设置-->开启固定应用选项。
然后,打开要设置的应用,在点击导航栏的recent按键(方形的那个按键),然后 长按顶上的图标就会出来一个菜单,里面有一个固定的选项。点击“固定”,就可以设置app为固定应用。app这个时候就退出不了。
点击返回和home按键就退出不了了。
上面是手动设置app的方式,当然,也可以通过代码去实现这个功能。具体方式就是开机以后去启动要设置的app,然后通过ActivityTaskManager.getService().startSystemLockTaskMode(taskId)去设置app为固定app。startSystemLockTaskMode这个函数是通过taskid去设置app为固定应用的。所以启动app后,就可以获取appde taskid了。这个功能通过一个函数就可以实现了。
public static void setAppAsPinApp(Context context, String packageName) {
int taskId = -1;
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RecentTaskInfo> tasks = activityManager.getRecentTasks(5, 0);
if (tasks != null) {
for (RecentTaskInfo task : tasks) {
if (task.topActivity != null && task.topActivity.getPackageName().equals(packageName)) {
taskId = task.id;
Log.i(TAG, "get pin app:" + packageName + " taskId:"+taskId);
break;
}
}
}
if(taskId > 0){
try {
ActivityTaskManager.getService().startSystemLockTaskMode(taskId);
} catch (RemoteException e) {
}
}
}
上面是设置应用为固定应用,如果要取消设置固定应用,则调用ActivityTaskManager.getService().stopSystemLockTaskMode函数即可。