- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是一名学生,我正在为一个项目开发 Android 2.2。对于我的测试和应用程序执行,我使用的是 HTC Desire HD(Android 2.2)。
我只想创建一个合成器(类)来用移动设备拍照。我有一个 Android 类,用于 getOptimalPreviewSize() 方法(此方法在 ApiDemos 2.2 中)。此方法用于修复此类错误:
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): java.lang.RuntimeException: Fail to connect to camera service
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.hardware.Camera.native_setup(Native Method)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.hardware.Camera.<init>(Camera.java:118)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.hardware.Camera.open(Camera.java:91)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at com.example.android.apis.graphics.Preview.surfaceCreated(CameraPreview.java:69)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.SurfaceView.updateWindow(SurfaceView.java:540)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.ViewGroup.drawChild(ViewGroup.java:1660)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1389)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.View.draw(View.java:6764)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.widget.FrameLayout.draw(FrameLayout.java:352)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.ViewGroup.drawChild(ViewGroup.java:1662)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1389)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.View.draw(View.java:6764)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.widget.FrameLayout.draw(FrameLayout.java:352)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1887)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.ViewRoot.draw(ViewRoot.java:1422)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.ViewRoot.performTraversals(ViewRoot.java:1167)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.view.ViewRoot.handleMessage(ViewRoot.java:1744)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.os.Looper.loop(Looper.java:143)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at android.app.ActivityThread.main(ActivityThread.java:5068)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at java.lang.reflect.Method.invokeNative(Native Method)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at java.lang.reflect.Method.invoke(Method.java:521)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-14 21:38:05.818: ERROR/AndroidRuntime(2884): at dalvik.system.NativeStart.main(Native Method)
所以,我用这段代码解决了这个问题:
public class CameraView extends Activity implements SurfaceHolder.Callback {
private SurfaceView mSurfaceView = null;
private SurfaceHolder mSurfaceHolder = null;
private Camera mCamera = null;
private boolean mPreviewRunning = false;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.camera_surface);
mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
if (!(android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)))
{
Toast
.makeText(CameraView.this, R.string.msgNoSdCard, Toast.LENGTH_LONG)
.show();
}
else
{
Toast
.makeText(CameraView.this, R.string.msgPressBackBt, Toast.LENGTH_LONG)
.show();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
// TODO: add more exception handling logic here
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//Handle the back button
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_CAMERA)){
mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
return true;
}
else {
return super.onKeyDown(keyCode, event);
}
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
}
};
/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
}
};
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
// write to local sandbox file system
//outStream =
//CameraView.this.openFileOutput(String.format("%d.jpg",
//System.currentTimeMillis()), 0);
// Or write to sdcard
long fileName = System.currentTimeMillis();
outStream = new FileOutputStream(String.format(
"/sdcard/%d.jpg", fileName));
outStream.write(data);
outStream.close();
Intent resultIntent = new Intent();
String imageFileName = String.format("/sdcard/%d.jpg", fileName);
resultIntent.putExtra("MyAvatar", imageFileName);
setResult(Activity.RESULT_OK, resultIntent);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
}
}
};
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.05;
double targetRatio = (double) w / h;
if (sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
// Try to find an size match aspect ratio and size
for (Size size : sizes) {
double ratio = (double) size.width / size.height;
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
// Cannot find the one match the aspect ratio, ignore the requirement
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
Camera.Parameters parameters = mCamera.getParameters();
List<Size> sizes = parameters.getSupportedPreviewSizes();
Size optimalSize = getOptimalPreviewSize(sizes, w, h);
parameters.setPreviewSize(optimalSize.width, optimalSize.height);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}
最后一个问题是:如果设备正在显示相机 View ,则设备会完全迷失方向。如果我将相机指向房间的顶部(拍摄的场景),屏幕会向左移动,如果我将相机放在地上,屏幕会向右移动。横向屏幕存在同样的问题,但高度和宽度以及相机方向错误。
是否有解决 HTC Desire HD Camera API 问题的解决方案?
谢谢,
相关链接:
Android 2.2 SDK - setParameters failed for Camera API on Nexus One
最佳答案
问题不在于您的手机,而在于您为相机分辨率设置的参数。在学习使用 Nexus One 上的相机时,我遇到了类似的问题。您需要获取适用于代码正在使用的手机的已知分辨率列表,并将其设置为其中之一。
您确定获取参数不起作用吗?您可以发布无效的代码吗?也许你做错了。
关于android - HTC Desire HD 不接受 hardware.Camera 的 setParameter(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998205/
我没有主意,我一整天都在尝试分离一个格式为:的文件 AN Aixas AN Aixirivall AN Aixovall AN Andorra la Vella BR Salto do Ma
我想在动态生成的控件中设置所需的 ClientID。如果您有任何想法将所需的 ClientID 设置为控件而不是告诉我,则 ClientID 是只读的 最佳答案 这只能在 .Net 4 及更高版本中完
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我看了看手机规范,是这样说的 “HTC Desire。配备 3.7 英寸 LCD 屏幕(分辨率为 480 x 800 像素)” 好吧,屏幕是 480x800 像素,但它有多少凹陷?以及我该如何计算。
我使用了 SauceLabs example DesiredCapabilities capabilities = new DesiredCapabilities(); capabilit
问题 我想实现TransparencyChecker Interface,它将验证网络中的任何交易所是否都可以使用来自其他交易所的所有交易信息。 问:TransparencyChecker Infer
在我的应用程序中,一项服务是从服务器获取数据并将其插入表 A。 如果我转到特定的 UI,我需要列出来自另一个 table B 的数据 if background 操作正在做它会产生数据库锁定异常。我有
我为一个应用程序编写了代码。其中我为编辑文本编写了 IME_ACTION_DONE。所有其他设备都支持此操作,但在 HTC 的期望中,我还没有得到这个“完成”软键盘按钮。我怎样才能得到这个软按钮HTC
我需要将我的安卓设备连接到蓝牙设备。我使用 Google 的 BluetoothChat 示例。 我在使用 Google Nexus 时遇到了一些麻烦,因为 Nexus 正在建立连接但随后立即断开连接
Once the love dead 谢谢你光临我的梦 A people only a heart 一人仅一心 I will always love you我将会永远爱你 Down enoug
我已经尝试解决这个问题 2 个小时了,但我无法理解其他人为遇到类似问题的人提供的解决方案。我看到了一些答案,但无法将其应用于我自己的需求。 我有一张用户表以及他们在不同体育赛事中的时间。我需要制作一个
有人在他们的 SDK 中安装了 HTC Desire HD 吗?如果可以,请告诉我您选择了哪些设置来配置 AVD。 我有一个网站可以在除此之外的所有 Android 设备上正确呈现,因此必须对其进行测
我希望当字符串包含字符“e”时打印红色圆圈,如果字符串包含任何其他字符则打印黑色圆圈。 我不知道我到底哪里错了。有人能帮我吗?。 这是我试过的代码。 HTML diagram JavaScript
我在 Android 中做了一个带自动对焦功能的小型相机应用程序。在我的 nexus one 上,一切正常,但在 htc desire 上,当我从 Camera 对象调用 takePicture()
我想写一个自动生成联系人的程序。我还使用特殊服务在模拟器上添加帐户。电话上使用相同的帐户。下面是我的代码: ContentValues values = new ContentValues(); va
我正在尝试了解消息队列的工作原理。我创建了这个小程序,其中子进程向父进程发送消息。大多数时候,它都有效,但有时我会收到错误消息:Error parent: No message of desired
我在维基百科 (Bikesgray) 的图像上应用了 sobel 运算符。但是我没有得到想要的输出。我的输出比维基百科中显示的输出更亮。我的代码在 .pgm 文件上运行。 这是我的代码的输出和维基百科
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我想要一个带有开始或完成按钮的数字小键盘,该按钮可以关闭并执行计算类。多亏了 commonware 关于从哪里开始的提示,我才能在模拟器上完美地工作。然后我把它加载到我的 HTC 愿望上进行测试,但它
如何让 v-for 以与以下 html 相同的形式显示表格数据: Name Price Product ID 目前我正在使用以下 vue v-for 代码(如下)
我是一名优秀的程序员,十分优秀!