Я пытаюсь сделать так, чтобы один аспект моего приложения блокировал другие приложения, если они посетили, используя код, который я видел на сайтах ниже. Моя проблема здесь в том, что приложение не обнаруживает другие приложения, которые я открыл, и выводит com.sec.android.app.launcher только тогда, когда у меня не открыто приложение основной блокировки. Я использовал приведенное ниже разрешение, так как остальные были обесценены. Я понимаю, что моя программа перейдет в режим блокировки экрана только в том случае, если я нахожусь в приложении блокировки, но если я изменю это на другой пакет, он не будет работать.
Я использовал эти и другие ссылки, чтобы попытаться исправить ситуацию, но я довольно застрял, я не понимаю, что я делаю неправильно.
Приложение для блокировки Android
Программная блокировка приложений для Android
<uses-permission xmlns:tools="http://schemas.android.com/tools"
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
public class MyService extends Service{
CountDownTimer check;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
public void heh(){
check = new CountDownTimer(5000, 5000) {
@Override
public void onTick(long millisUntilFinished) {
//Do nothing here
}
@Override
public void onFinish() {
PackageManager packageManager = getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> appList = packageManager.queryIntentActivities(mainIntent, 0);
Collections.sort(appList, new ResolveInfo.DisplayNameComparator(packageManager));
List<PackageInfo> packs = packageManager.getInstalledPackages(0);
for (int i = 0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
ApplicationInfo a = p.applicationInfo;
if ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
continue;
}
// skip system apps if they shall not be included
}
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);
// List<ActivityManager.RunningAppProcessInfo> RunningApp = mActivityManager.getRunningAppProcesses();
// ActivityManager.RunningAppProcessInfo apr = RunningApp.get(0);
ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
String activityOnTop = ar.topActivity.getPackageName();
// String activityOnTops = apr.processName;
Toast.makeText(MyService.this, "Activity is: " + activityOnTop, Toast.LENGTH_LONG).show();
if (activityOnTop.contains("com.example.heh.lock")) {
Intent lockIntent = new Intent(MyService.this, LockScreen.class);
lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyService.this.startActivity(lockIntent);
}else{
}
this.cancel();
this.start();
}
};
}
@Override
public void onCreate() {
Toast.makeText(this, "Congrats! MyService Created", Toast.LENGTH_LONG).show();
heh();
// usageAccessSettingsPage();
// hmm();
check.start();
}