アプリケーションに「android.permission.CAMERA」があり、アプリがカメラ ハードウェアにアクセスしようとしたときにこのアクセス許可の使用をブロックしたい場合、「セキュリティ上の理由から」プロセスをブロックするにはどうすればよいですか?
*注: 私のアプリがすべての権限を持っていると仮定しましょう...
アプリケーションに「android.permission.CAMERA」があり、アプリがカメラ ハードウェアにアクセスしようとしたときにこのアクセス許可の使用をブロックしたい場合、「セキュリティ上の理由から」プロセスをブロックするにはどうすればよいですか?
*注: 私のアプリがすべての権限を持っていると仮定しましょう...
デバイス管理 APIを使用する必要があります。Android 4.0 以降では、setCameraDisabledでカメラの使用を無効にできます。
ルート化されていないソリューションについては知りませんが、アプリごとに個々のアプリのアクセス許可をブロックできる「Android Permission Blocker」と呼ばれるアプリが Android マーケットにあります。99 セントしかかからないので、試してみて、それ以来ずっとうまく使っています。私の意見では、すべてのペニーの価値があります。
プログラマーが「これは無理だ!」と言うのが嫌いです。 「抜け道は必ずある」と思います。
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();}
}