如果应用程序具有“android.permission.CAMERA”,并且我希望我的应用程序在尝试访问相机硬件时阻止使用此权限,“出于安全原因”,我该如何阻止该过程?
*注意:假设我的应用程序具有所有权限...
如果应用程序具有“android.permission.CAMERA”,并且我希望我的应用程序在尝试访问相机硬件时阻止使用此权限,“出于安全原因”,我该如何阻止该过程?
*注意:假设我的应用程序具有所有权限...
您需要使用设备管理 API。从 Android 4.0 开始,您可以使用setCameraDisabled禁用相机
我不知道有任何非 root 解决方案,但是 android 市场上有一个名为“Android Permission Blocker”的应用程序可以在应用程序的基础上阻止单个应用程序的权限。它只花了 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();}
}