【发布时间】:2011-07-26 04:06:35
【问题描述】:
我正在尝试将相机的图像用作动态壁纸的一部分。
在我声明的引擎中,我有以下代码:
public class Class extends WallpaperService
{
Camera cam;
@Override
public void onCreate()
{
super.onCreate();
cam = Camera.open();
}
//...
@Override
public Engine onCreateEngine()
{
return new CubeEngine(cam);
}
class CubeEngine extends Engine
{
Camera cam;
CubeEngine(Camera cam)
{
this.cam=cam;
}
//...
@Override
public void onDestroy()
{
if (cam != null)
{
cam.stopPreview();
cam.setPreviewCallback(null);
cam.release();
cam = null;
}
super.onDestroy();
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height)
{
try
{
cam.setPreviewDisplay(holder);
cam.startPreview();
}
catch (IOException e)
{
e.printStackTrace();
}
super.onSurfaceChanged(holder, format, width, height);
}
@Override
public void onSurfaceCreated(SurfaceHolder holder)
{
super.onSurfaceCreated(holder);
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder)
{
if (cam != null)
{
cam.stopPreview();
cam.setPreviewCallback(null);
cam.release();
cam = null;
}
super.onSurfaceDestroyed(holder);
}
//...
}
}
cam 是一个被声明为 Camera.open();
的相机当我运行它时,我得到:java.io.IOException: setPreviewDisplay failed
我现在遇到了这个异常:
07-26 00:12:18.399: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.419: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.439: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.459: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.479: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.509: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.529: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.549: WARN/CameraService(1357): Overlay create failed - retrying
07-26 00:12:18.569: ERROR/CameraService(1357): Overlay Creation Failed!
07-26 00:12:18.609: WARN/System.err(4104): java.lang.RuntimeException: startPreview failed
07-26 00:12:18.609: WARN/System.err(4104): at android.hardware.Camera.startPreview(Native Method)
07-26 00:12:18.609: WARN/System.err(4104): at com.petrifiednightmares.transparentphone.main.GenericaCamera.surfaceChanged(GenericaCamera.java:29)
07-26 00:12:18.609: WARN/System.err(4104): at android.service.wallpaper.WallpaperService$Engine.updateSurface(WallpaperService.java:687)
07-26 00:12:18.609: WARN/System.err(4104): at android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:749)
07-26 00:12:18.619: WARN/System.err(4104): at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:984)
07-26 00:12:18.619: WARN/System.err(4104): at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
07-26 00:12:18.619: WARN/System.err(4104): at android.os.Handler.dispatchMessage(Handler.java:99)
07-26 00:12:18.619: WARN/System.err(4104): at android.os.Looper.loop(Looper.java:143)
07-26 00:12:18.619: WARN/System.err(4104): at android.app.ActivityThread.main(ActivityThread.java:4293)
07-26 00:12:18.629: WARN/System.err(4104): at java.lang.reflect.Method.invokeNative(Native Method)
07-26 00:12:18.629: WARN/System.err(4104): at java.lang.reflect.Method.invoke(Method.java:507)
07-26 00:12:18.629: WARN/System.err(4104): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-26 00:12:18.629: WARN/System.err(4104): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-26 00:12:18.629: WARN/System.err(4104): at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
我认为您将不得不添加更多代码,以便我们可以在课堂上看到您正在使用它的相机的整个设置。
-
是的,您需要显示更多代码。例如,您是如何创建表面的?
-
我放了更多代码。这是我第一次涉足android开发,所以如果我犯了一些非常愚蠢的错误,请告诉我。 :)
-
虽然我会做一些不同的设置事件,但我看到的唯一缺少的是设置相机的预览大小。我有兴趣看看墙纸的表面视图是否可以处理相机预览。不要认为这是一个好主意,但听起来是一个有趣的项目。
-
是的,这就是我不确定的事情。我还没有看到任何利用相机的动态壁纸,因此决定编写一个快速应用程序作为概念证明(可以演变成一个成熟的 AR 应用程序)。一个很大的可能性是墙纸根本无法处理相机预览(可能是android开发人员为防止过度使用电池而故意采取的举措?)
标签: android camera android-camera live-wallpaper