强制覆盖android上的摄像头图像

时间:2013-08-25 02:26:14

标签: android image camera override

有没有办法强制Android相机看到特定的东西,比如图像?

我有一个名为FakeGPS的应用程序,基本上,任何试图使用Android的GPS方法的系统都会获得我使用该应用程序设置的假坐标。

我想做同样的事情,除了相机。

使用相机的任何应用都会获得我放入的图像。

5 个答案:

答案 0 :(得分:6)

相机实现完全原生,一切都适用于系统和相机驱动程序之间的IPC调用(由不同的制造商提供)。

如果不重新编译整个操作系统,就无法拦截此链。

您可以找到更多信息here

答案 1 :(得分:1)

正如@dmarcato所说 - 如果你想用相机操作任何与每个相机应用程序相关的东西 - 唯一的方法就是以某种方式改变android的原生源代码 - 只有在编译包含这个的android OS图像时才能做到这一点变化。

因此,如果您不打算向您的每个用户提供自定义操作系统固件(对于您要支持的每个设备 - 它是包含特定二进制驱动程序的不同图像..),您可以忘记这一点。

如果这还不够,还有一个问题是本机核心摄像头代码不一定是Android代码,而是供应商特定代码,可能在每个设备上完全不同。这意味着您可能需要为每个设备映像实现不同的“hack”以使其正常工作。

答案 2 :(得分:0)

目前还不清楚你想说什么。我想你想强制设置一些应用程序用于特定的文件或内容类型。从代码中设置默认应用程序是不可能的。只有用户可以为特定操作或内容类型选择默认应用程序。

但是你仍然可以运行特定的系统应用程序,但只能从您的应用程序运行,例如启动任何系统摄像头,无论手机制造商是谁:

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);

答案 3 :(得分:0)

我让这个在root设备上工作。您可以使用xposed http://repo.xposed.info/module/de.robv.android.xposed.installer之类的东西来修改普通应用程序用来抓取相机图像的方法。这对记录或系统本机应用程序的想法不起作用。 你需要其他工具。如果你想在全局和相机源上做到这一点,你可能需要构建自己的android内核。但那也不是那么难。问题在于您必须为每个设备和固件版本构建另一个内核。

答案 4 :(得分:-2)

乍一看,你想要做的事似乎是不道德的。

除非您愿意修改内核或系统库,否则也是不可能的。