Как я могу отключить любое приложение android, чтобы его нельзя было открыть, пока я не изменю / не нажму какую-нибудь кнопку в приложении? - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь создать приложение для родительского контроля. Теперь я хочу отключить или заблокировать приложение (например, Whatsapp, Facebook и т. Д. c). Я пытался использовать PackageManager.setComponentEnabledSetting(). Но это бросает java.lang.SercurityException.

Так как я могу сделать приложение для родительского контроля таким образом, чтобы я мог отключить любое приложение, которое я хочу, без root.

my код

 pm.setComponentEnabledSetting(new ComponentName(temp.activityInfo.packageName,
                        temp.activityInfo.name+".class"),
                        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                        PackageManager.DONT_KILL_APP);

моя ошибка была такой

java .lang.SecurityException: Отказ в разрешении: попытка изменить состояние компонента с pid = 11537, uid = 10067, пакет uid = 10029

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Вы не можете написать приложение для блокировки или закрытия другого приложения. Это политика в Google. Для блокировки приложения вы должны проверять запущенные приложения повторно, если указано, что приложение c открыто, а затем показывать активность над этим.

while(!Thread.currentThread().isInterrupted())
{
    String topActivity = getFrontApp();

    if(topActivity.isEmpty())
    {
        threadSleep(500);
        continue;
    }


    if(topActivity.equals("lockApp"))
    {
        showLockActivity();
    }

    threadSleep(500);
}

// for Api21+ need permission
    public static String getFrontApp()
    {
        if (Build.VERSION.SDK_INT >= 21)
        {
            UsageStatsManager usageManager = SystemMaster.getUsageStatsManager();
            long now = System.currentTimeMillis();
            List<UsageStats> localList = usageManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, now - 900_000L, now);
            String str = "";

            if (localList != null)
            {
                SortedMap<Long,UsageStats> mySortedMap = new TreeMap<>();

                for(UsageStats usageStats : localList)
                    mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);

                if(!mySortedMap.isEmpty())
                    str =  mySortedMap.get(mySortedMap.lastKey()).getPackageName();
            }

            return str;
        }
        else
        {
            ActivityManager am = (ActivityManager) getApplication().getSystemService(Context.ACTIVITY_SERVICE);
            return am.getRunningTasks(1).get(0).topActivity.getPackageName();
    }

Код выше очень прост, для реального приложения нужно написать больше.

0 голосов
/ 10 февраля 2020

Вы должны добавить ниже разрешения для манифеста.

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

, но эти разрешения предназначены для системных приложений, и вы не можете их использовать. (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...