各位大侠,小弟最近尝试在 android2.2上实现支持双camera,因为实在是太菜了,于是乎在网上搜索一番,找到了Wangxiaozhe的一篇《Android2.2平台上支持多camera》,这篇文章对我帮助很大,但是我的情况还不太一样,先说下我现在的思路:
1:在Settings.apk中添加一个选项,选择是前置还是后置camera, 将这个index保存在java/android/provider/Settings.java中。
2:修改camera.apk,在camera.apk初始化的时候获取java/android/provider/Settings.java中的index值,通过frramework层,一路下去告知camera hal层选择了哪个camera.
这种情况,我已经可以实现了,但是这样做有个问题,其余类似camera的apk就没法去打开正确的camera。也就是说,如果在Settings中选择了另外一个camera,在打开别的camera apk时,是不会有效果的。所以我在想,应该把通知camera hal层是哪个camera 被选中的代码加在framework层,即Framework/base/core/java/android/hardware/camera.java中,因为所有的camera apk都会调用到这个文件,但是问题来了,在这里面怎么去获得java/android/provider/Settings.java中的值呢?用
ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAMERA_INDEX, DEFAULT_CAMERA_INDEX)));;
会报错,但这两行代码在camera.apk中是可以用的。各位大侠有什么建议意见,或者更好的解决办法吗,在此谢过了!!
1:在Settings.apk中添加一个选项,选择是前置还是后置camera, 将这个index保存在java/android/provider/Settings.java中。
2:修改camera.apk,在camera.apk初始化的时候获取java/android/provider/Settings.java中的index值,通过frramework层,一路下去告知camera hal层选择了哪个camera.
这种情况,我已经可以实现了,但是这样做有个问题,其余类似camera的apk就没法去打开正确的camera。也就是说,如果在Settings中选择了另外一个camera,在打开别的camera apk时,是不会有效果的。所以我在想,应该把通知camera hal层是哪个camera 被选中的代码加在framework层,即Framework/base/core/java/android/hardware/camera.java中,因为所有的camera apk都会调用到这个文件,但是问题来了,在这里面怎么去获得java/android/provider/Settings.java中的值呢?用
ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAMERA_INDEX, DEFAULT_CAMERA_INDEX)));;
会报错,但这两行代码在camera.apk中是可以用的。各位大侠有什么建议意见,或者更好的解决办法吗,在此谢过了!!
用
ContentResolver resolver = getContentResolver();
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAMERA_INDEX, DEFAULT_CAMERA_INDEX)));;
会报错,但这两行代码在camera.apk中是可以用的。什么意思?你难道不重新另外定义一个变量来标识吗
mCameraId = Integer.parseInt(String.valueOf(Settings.System.getInt(resolver, CAMERA_INDEX, DEFAULT_CAMERA_INDEX)));;
因为在这个camera.java中不可能调用到getContentResolver函数,这是在activity中才可以调用的吧
嗯,懂你的意思了。想要在framework层和app层增加一个camera选项,工作量很大。
需要修改:
frameworks/base/Android.mk 把你的camera 加进去
frameworks/base/core/java/android/provider/Settings.java
frameworks/base/core/jni/Android.mk
frameworks/base/core/jni/AndroidRuntime.cpp
frameworks/base/core/res/res/values/arrays.xml
frameworks/base/core/res/res/values/config.xml
packages/apps/Settings/AndroidManifest.xml
build/core/pathmap.mk
等等
还有你的camera 文件还需要根据你的情况 修改init.rc 创建相关目录 或者启动相关service ==真不是件容易的事
恩,所以用prop去试验一下,persist.prop是可以保存的prop,在setting中保存的是把数据写入到prop里面而不写到数据库里面。
这样,在camera.java中去读取这个prop的值,prop的操作可以直接使用的。
在java中使用android.os.SystemProperties来操作prop(参考的文章中说的是错误的)
SystemProperties sp = new SystemProperties();
String s = sp.get("persist.sys.cameraIndex");
sp.set("persist.sys.cameraIndex", "0");
之后会在/data/property/中生成persist.sys.cameraIndex,这个文件里面就是保存的值。
在camera hal层里面#include <cutils/properties.h>, 调用property_get("persist.sys.cameraIndex", &cameraId, "0"),就可以拿到在apk里设置的值了,这样的话就绕过了framework,service等,还挺方便的!问题解决了开心啊,之后就要开始调试camera driver了,不知到会有什么问题等着我呢总之谢谢大家了~
Camera.getParameters().isSmoothZoomSupported() -->false这种情况下,我怎么才能实现变焦呢??