1、展锐平台Andorid9任务栏有个功能,手动下拉任务栏界面可以对后台应用进行上锁和解锁操作,那想要实现应用保活功能(全部清除、手动上滑清除、重启、灭屏均无法杀死应用进程),我们就可以在系统读取到应用的时候onTaskDataLoaded()方法中默认给其上锁,并在changeLockState()方法中将其写死为true。
packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/TaskView.java
@Override
public void onTaskDataLoaded(Task task, ThumbnailData thumbnailData) {
if (task == null || mTask == null
|| !task.key.equals(mTask.key)) {
Log.e(TAG, "onTaskDataLoaded ignore load this task: " + task + "-- mTask: " + mTask);
return;
}
if (null != mLockIconView) {
String mskippkgname = "com.peaceton.phone";
String pkgname = mTask.key.baseIntent.getComponent().getPackageName();
if ((mskippkgname).equals(pkgname)) {
mLocked = true;
mLockIconView.setLockState(mLocked);
} else {
mLockIconView.setVisibility(View.VISIBLE);
mLocked = TaskLockStatus.isSavedUnlockedTask(getContext(), task);
mLockIconView.setLockState(mLocked);
}
}
mSnapshotView.setThumbnail(task, thumbnailData);
mIconView.setDrawable(task.icon);
mIconView.setOnClickListener(icon -> TaskMenuView.showForTask(this));
mIconView.setOnLongClickListener(icon -> {
requestDisallowInterceptTouchEvent(true);
return TaskMenuView.showForTask(this);
});
}
==================================>><<=======================================
public void changeLockState() {
mLocked = !mLocked;
TaskLockStatus.setLockState(getContext(),mTask,mLocked);
if (null != mLockIconView) {
String mskippkgname = "com.peaceton.phone";
String pkgname = mTask.key.baseIntent.getComponent().getPackageName();
if ((mskippkgname).equals(pkgname)) {
mLocked = true;
mLockIconView.setLockState(mLocked);
} else {
mLockIconView.setLockState(mLocked);
}
}
}
2、无障碍中的已下载的服务开启状态有默认值可以进行设置,在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java中:
private void loadSecureSettings(SQLiteDatabase db) {
loadSecure35Settings(stmt);
loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED, 1);
loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "com.peaceton.phone/com.peaceton.phone.AccessibilityService");//换成应用对应的无障碍服务即可
loadBooleanSetting(stmt, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND,
R.bool.def_mount_play_notification_snd);