4

如果应用程序具有“android.permission.CAMERA”,并且我希望我的应用程序在尝试访问相机硬件时阻止使用此权限,“出于安全原因”,我该如何阻止该过程?

*注意:假设我的应用程序具有所有权限...

4

3 回答 3

4

您需要使用设备管理 API。从 Android 4.0 开始,您可以使用setCameraDisabled禁用相机

于 2012-03-19T00:15:47.843 回答
3

我不知道有任何非 root 解决方案,但是 android 市场上有一个名为“Android Permission Blocker”的应用程序可以在应用程序的基础上阻止单个应用程序的权限。它只花了 99 美分,所以我试了一下,从那以后一直在成功使用它。在我看来,每一分钱都值得。

于 2013-07-05T01:14:04.390 回答
2

我讨厌程序员说“这不可能!” 我认为“总会有出路”

        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();}
    }
于 2014-06-08T12:47:23.973 回答