有什么方法可以强制 android 相机看到特定的东西,比如图像?
我有一个名为 FakeGPS 的应用程序,基本上,任何尝试使用 Android 的 GPS 方法的系统都会获得我使用该应用程序设置的假坐标。
我想做同样的事情,除了相机。
任何使用相机的应用程序都会得到我输入的图像。
有什么方法可以强制 android 相机看到特定的东西,比如图像?
我有一个名为 FakeGPS 的应用程序,基本上,任何尝试使用 Android 的 GPS 方法的系统都会获得我使用该应用程序设置的假坐标。
我想做同样的事情,除了相机。
任何使用相机的应用程序都会得到我输入的图像。
正如@dmarcato 所说-如果您想使用与每个相机应用程序相关的相机操作任何东西-唯一的方法是以某种方式更改android的本机源代码-只有在编译包含此更改的android OS图像时才能完成。
因此,如果您不打算为每个用户提供自定义操作系统固件(对于您想要支持的每个设备 - 它是包含特定二进制驱动程序的不同映像..),您可以忘记这一点。
如果这还不够,还有一个问题是原生核心相机代码不一定是 android 代码,而是供应商特定的代码,这可能在每个设备上完全不同。这意味着您可能需要为每个设备图像实施不同的“hack”以使其工作。
它很不清楚你想说什么。我猜您想强制设置某些应用程序用于特定文件或内容类型。从您的代码设置默认应用程序是不可能的。只有用户可以为特定操作或内容类型选择他们的默认应用程序。
但是您仍然可以运行特定的系统应用程序,但只能从您的应用程序中运行,例如启动任何系统摄像头,无论手机制造商如何:
Intent systemCamera = null;
PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for(ApplicationInfo packageInfo:packages){
Intent i = pm.getLaunchIntentForPackage(packageInfo.packageName);
if(i != null && i.getAction().equals(MediaStore.ACTION_IMAGE_CAPTURE)){
if((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM)!= 0){ //check if system app
systemCamera = i;
break;
}
}
}
startActivityForResult(systemCamera, MY_POSITIVE_INTEGER_REQUEST_CODE);
我让它在有根设备上工作。您可以使用诸如 xposed http://repo.xposed.info/module/de.robv.android.xposed.installer之类的东西来修改普通应用程序用来抓取相机图像的方法。这不适用于录制或系统原生应用程序的想法。那里你需要其他工具。如果您想在全局范围内直接在相机源处执行此操作,您可能需要构建自己的 android 内核。但这也不是那么难。问题是您必须为每个设备和固件版本构建另一个内核。
乍一看,你想做的事情似乎是不道德的。
除非你愿意修改内核或系统库,否则也是不可能的。