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

问题描述 投票:4回答:5

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

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

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

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

android image camera override
5个回答
6
投票

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

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

你可以找到更多信息here


1
投票

正如@dmarcato所说 - 如果你想使用与每个相机应用程序相关的相机操作任何东西 - 唯一的方法是以某种方式改变android的本机源代码 - 只有在编译包含此更改的android OS映像时才能完成。

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

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


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

0
投票

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


-2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.