Как заблокировать приложение Android от использования разрешения - PullRequest
4 голосов
/ 19 марта 2012

Если у приложения есть «android.permission.CAMERA», и я хотел, чтобы мое приложение блокировало использование этого разрешения при попытке доступа к оборудованию камеры, «по соображениям безопасности», как я мог заблокировать процесс?

* ПРИМЕЧАНИЕ. Предположим, что у моего приложения есть все разрешения ...

Ответы [ 3 ]

4 голосов
/ 19 марта 2012

Вам необходимо использовать API администрирования устройства . Начиная с Android 4.0 вы можете отключить использование камеры с помощью setCameraDisabled

3 голосов
/ 05 июля 2013

Я не знаю ни одного некорневого решения, однако на рынке Android есть приложение под названием «Android Permission Blocker», которое может блокировать отдельные разрешения приложений на основе приложений.Это стоит всего 99 центов, поэтому я попробовал и с тех пор пользуюсь им с успехом.На мой взгляд, стоит каждой копейки.

2 голосов
/ 08 июня 2014

Я ненавижу, когда программисты говорят "это невозможно!" Я думаю, что "всегда есть выход"

        public static void      killAppByPermission (Context context, String permissionToKill)
        {
            try
            {
                PackageManager p = context.getPackageManager();
                final List <PackageInfo> appinstall = p.getInstalledPackages(PackageManager.GET_PERMISSIONS);
                for(PackageInfo pInfo:appinstall)
                {
                    String[] reqPermission = pInfo.requestedPermissions;
                    if(reqPermission != null)
                    {
                        for(int i=0;i<reqPermission.length;i++)
                        {
                            if (((String)reqPermission[i]).toLowerCase().contains(permissionToKill.toLowerCase()))
                            {
                                killAppByPackName(pInfo.packageName.toString());
                                break;
                            }
                        }
                    }
                }
            }
            catch (Throwable t){t.printStackTrace();}
        }

    public static void      killAppByPackName   (String packageToKill)
    {
        try
        {
            ActivityManager actvityManager = (ActivityManager) Sett.context.getSystemService(Context.ACTIVITY_SERVICE);
            final List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();
            for (RunningAppProcessInfo runningAppProcessInfo : procInfos) 
            {
                //Log.e("running",runningAppProcessInfo.processName);
                if(runningAppProcessInfo.processName.toLowerCase().contains(packageToKill.toLowerCase())) 
                {
                    android.os.Process.sendSignal(runningAppProcessInfo.pid, android.os.Process.SIGNAL_KILL);
                    actvityManager.killBackgroundProcesses(packageToKill);
                    //Log.e("killed", "!!! killed "+ packageToKill);
                }           
            }
        }
        catch (Throwable t){History.Error(t);}
    }

    public static void      killAppByName       (Context context, String appNameToKill)
    {
        try
        {
            ActivityManager  manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningAppProcessInfo> listOfProcesses = manager.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo process : listOfProcesses)
            {
                if (process.processName.toLowerCase().contains(appNameToKill.toLowerCase()))
                {
                    //Log.e("killed", process.processName);
                    manager.killBackgroundProcesses(process.processName);
                    break;
                }
            }
        }
        catch (Throwable t){t.printStackTrace();}
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...