topActivity.getPackageName возвращает только панель запуска или блокировку моего приложения. Как это исправить? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь сделать так, чтобы один аспект моего приложения блокировал другие приложения, если они посетили, используя код, который я видел на сайтах ниже. Моя проблема здесь в том, что приложение не обнаруживает другие приложения, которые я открыл, и выводит 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();

}
...