6

有什么方法可以强制 android 相机看到特定的东西,比如图像?

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

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

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

4

5 回答 5

6

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

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

你可以在这里找到更多信息。

于 2013-09-07T21:55:26.843 回答
1

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

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

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

于 2013-09-08T05:28:52.913 回答
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);
于 2013-09-06T03:04:21.517 回答
0

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

于 2016-01-05T09:21:11.703 回答
-2

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

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

于 2013-09-06T03:48:46.523 回答