4

アプリケーションに「android.permission.CAMERA」があり、アプリがカメラ ハードウェアにアクセスしようとしたときにこのアクセス許可の使用をブロックしたい場合、「セキュリティ上の理由から」プロセスをブロックするにはどうすればよいですか?

*注: 私のアプリがすべての権限を持っていると仮定しましょう...

4

3 に答える 3

4

デバイス管理 APIを使用する必要があります。Android 4.0 以降では、setCameraDisabledでカメラの使用を無効にできます。

于 2012-03-19T00:15:47.843 に答える
3

ルート化されていないソリューションについては知りませんが、アプリごとに個々のアプリのアクセス許可をブロックできる「Android Permission Blocker」と呼ばれるアプリが Android マーケットにあります。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 に答える