문제

If an application has the "android.permission.CAMERA", and I wanted my app to block the use of this permission when it tries to access the Camera Hardware,"for security reasons" how could I block the process?

*NOTE: Let's assume that My app has all of the permissions...

도움이 되었습니까?

해결책

You need to use the Device Administration API. Starting with Android 4.0 you can disable use of the camera with setCameraDisabled

다른 팁

I don't know of any non-rooted solutions, however there is an app on the android market called "Android Permission Blocker" that can block individual app permissions on an app basis. It only costs 99 cents so I tried it out and have been using it with success every since. Worth every penny in my opinion.

I hate when programmers say "this is impossible!" I think "there is always a way out"

        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();}
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top