草庐IT

android - 无法连接到 G1 上的相机服务

coder 2023-12-07 原文

我提前为这篇冗长的帖子道歉,但有必要展示正在发生的事情。

我一直在开发一款可以在 1.6 模拟器上运行的应用程序,但在我的 G1 上却很糟糕。

这是摄影师 Activity :

public class Photographer extends Activity {

 private SurfaceView preview = null;
 private SurfaceHolder previewHolder = null;
 private Camera camera = null;
 public static final int IMAGE_HEIGHT = 320;
 public static final int IMAGE_WIDTH = 480;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.photographer);

  preview = (SurfaceView)findViewById(R.id.preview);
  previewHolder = preview.getHolder();
  previewHolder.addCallback(surfaceCallback);
  previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }

 private void takePicture() {
  camera.stopPreview();
  camera.takePicture(null, null, photoCallback);
 }

 SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
  public void surfaceCreated(SurfaceHolder holder) {
   camera = Camera.open();

   try {
    camera.setPreviewDisplay(previewHolder);
   }
   catch (Throwable t) {
    Log.e("Photographer", "Exception in setPreviewDisplay()", t);
   }
   try {
    takePicture();
   } catch (Throwable t) {
    Log.e("Photographer", "Exception in takePicture()", t);
   }
  }

  public void surfaceChanged(SurfaceHolder holder,
         int format, int width, int height) {
   Camera.Parameters parameters=camera.getParameters();
   parameters.setPreviewSize(IMAGE_WIDTH, IMAGE_HEIGHT);
   parameters.setPictureFormat(PixelFormat.JPEG);
   camera.setParameters(parameters);
   camera.startPreview();
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
   camera.stopPreview();
   camera.release();
   camera = null;
  }
 };

 Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
  public void onPictureTaken(byte[] data, Camera camera) {
   new SavePhotoTask().execute(data);
   camera.startPreview();
  }
 };

 class SavePhotoTask extends AsyncTask<byte[], String, String> {
  @Override
  protected String doInBackground(byte[]... jpeg) {
   File photo = new File(Environment.getExternalStorageDirectory(), "WIIA-new.jpg");
   if (photo.exists())
    photo.renameTo(new File(Environment.getExternalStorageDirectory(), "WIIA-old.jpg"));

   try {
    FileOutputStream fos = new FileOutputStream(photo.getPath());

    fos.write(jpeg[0]);
    fos.close();
    Log.e("Photographer", "Picture taken");
    // returning result
      Intent returnIntent = new Intent();
      setResult(RESULT_OK, returnIntent);     
      finish();
   }
   catch (java.io.IOException e) {
    Log.e("Photographer", "Exception in photoCallback", e);

    // returning result
      Intent returnIntent = new Intent();
    setResult(RESULT_CANCELED, returnIntent);
    finish();
   }

   return(null);
  }
 }

}

这里是调用此 Activity 的地方:

    public class WIIA extends Activity {

 public class CountDown extends CountDownTimer {
  private TextView tvCountDown = (TextView) findViewById(R.id.progress);
  private TextView tvSystemState = (TextView) findViewById(R.id.system_state);

  public CountDown(long millisInFuture, long countDownInterval) {
   super(millisInFuture, countDownInterval);
  }

  @Override
  public void onFinish() {
   tvSystemState.setText(R.string.system_state_armed);
   tvCountDown.setText(R.string.armed);
   snapshotInterval = Long.parseLong(settings.getString("snapshot_interval_list", "5"));
   imgCaptureTimer = new Timer("imageCapture");
   imgCaptureTimer.scheduleAtFixedRate(doRefresh, 0, snapshotInterval*1000);
  }

  @Override
  public void onTick(long millisUntilFinished) {
   tvCountDown.setText(millisUntilFinished/1000 + " seconds until Armed");
  }

 }

 private TimerTask doRefresh = new TimerTask() {
  public void run() {
   if (armed) {
    refreshImage();
   } else {
    imgCaptureTimer.cancel();
   }
  }
 };

 private void refreshImage() {
  Thread updateThread = new Thread(null, backgroundCaptureImage, "capture_image");  
  updateThread.start();        
 }

 private Runnable backgroundCaptureImage = new Runnable() {
  public void run() {
   doRefreshImage();
  }        
 };

 private void doRefreshImage() {
  Intent photographer = new Intent(this, Photographer.class);
  startActivityForResult(photographer, GET_PHOTO);
 }

 @Override
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  switch(requestCode) {
   case (GET_PHOTO) : {
    if(resultCode == RESULT_OK) {
    // go on to compare images
     new ProcessImageTask().execute();
    }
    break;
   }
  }
 }

粘贴 AndroidManifest.xml 的相关部分时遇到问题,但我有相机的权限:

  <uses-permission android:name="android.permission.CAMERA" />

这是摄影师部分:

      <activity android:name=".Photographer"
   android:configChanges="keyboardHidden|orientation"
   android:screenOrientation="landscape"
   android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
  </activity>

也设置为在 G1 上进行测试:

android:debuggable="true"

从 1.6 开始工作:

<uses-sdk android:minSdkVersion="4" />

所有这些都适用于 1.6 模拟器,但是当我在 G1 上运行时,LogCat 显示:

INFO/ActivityManager(74): Starting activity: Intent { cmp=com.androidsecurity.wiia/.Photographer }

WARN/WindowManager(74): App freeze timeout expired.

WARN/WindowManager(74): Force clearing freeze: AppWindowToken{432e1520 token=HistoryRecord{43124c10 com.androidsecurity.wiia/.Photographer}}

WARN/ActivityManager(74): Activity pause timeout for HistoryRecord{43124c10 com.androidsecurity.wiia/.Photographer}

ERROR/QualcommCameraHardware(51): native_get_picture: MSM_CAM_IOCTL_GET_PICTURE fd 13 error Connection timed out

ERROR/QualcommCameraHardware(51): getPicture failed!

DEBUG/QualcommCameraHardware(51): snapshot_thread X

INFO/QualcommCameraHardware(51): initPreview E: preview size=480x320

DEBUG/QualcommCameraHardware(51): frame_thread E

DEBUG/CameraService(51): CameraService::connect E (pid 1031, client 0x3b510)

DEBUG/CameraService(51): CameraService::connect X (pid 1031, new client 0x3b510) rejected. (old pid 1031, old client 0x3b2e0)

DEBUG/AndroidRuntime(1031): Shutting down VM

WARN/dalvikvm(1031): threadid=3: thread exiting with uncaught exception (group=0x4001da28)

ERROR/AndroidRuntime(1031): Uncaught handler: thread main exiting due to uncaught exception

ERROR/AndroidRuntime(1031): java.lang.RuntimeException: Fail to connect to camera service

ERROR/AndroidRuntime(1031):     at android.hardware.Camera.native_setup(Native Method)

ERROR/AndroidRuntime(1031):     at android.hardware.Camera.native_setup(Native Method)

ERROR/AndroidRuntime(1031):     at android.hardware.Camera.open(Camera.java:67)

ERROR/AndroidRuntime(1031):     at com.androidsecurity.wiia.Photographer$1.surfaceCreated(Photographer.java:78)

ERROR/AndroidRuntime(1031):     at android.view.SurfaceView.updateWindow(SurfaceView.java:392)

ERROR/AndroidRuntime(1031):     at android.view.SurfaceView.dispatchDraw(SurfaceView.java:264)

ERROR/AndroidRuntime(1031):     at android.view.ViewGroup.drawChild(ViewGroup.java:1524)

ERROR/AndroidRuntime(1031):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

ERROR/AndroidRuntime(1031):     at android.view.ViewGroup.drawChild(ViewGroup.java:1524)

ERROR/AndroidRuntime(1031):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)

ERROR/AndroidRuntime(1031):     at android.view.View.draw(View.java:6277)

ERROR/AndroidRuntime(1031):     at android.widget.FrameLayout.draw(FrameLayout.java:352)

ERROR/AndroidRuntime(1031):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1883)

ERROR/AndroidRuntime(1031):     at android.view.ViewRoot.draw(ViewRoot.java:1332)

ERROR/AndroidRuntime(1031):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1097)

ERROR/AndroidRuntime(1031):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1613)

ERROR/AndroidRuntime(1031):     at android.os.Handler.dispatchMessage(Handler.java:99)

ERROR/AndroidRuntime(1031):     at android.os.Looper.loop(Looper.java:123)

ERROR/AndroidRuntime(1031):     at android.app.ActivityThread.main(ActivityThread.java:4203)

ERROR/AndroidRuntime(1031):     at java.lang.reflect.Method.invokeNative(Native Method)

ERROR/AndroidRuntime(1031):     at java.lang.reflect.Method.invoke(Method.java:521)

ERROR/AndroidRuntime(1031):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)

ERROR/AndroidRuntime(1031):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)

ERROR/AndroidRuntime(1031):     at dalvik.system.NativeStart.main(Native Method)

和/data/anr/traces.txt 显示:

`DALVIK THREADS:
"main" prio=5 tid=3 NATIVE
  | group="main" sCount=1 dsCount=0 s=N obj=0x4001db08 self=0xbc48
  | sysTid=358 nice=0 sched=0/0 handle=-1343996920
  at android.os.BinderProxy.transact(Native Method)
  at android.app.ActivityManagerProxy.handleApplicationError(ActivityManagerNative.java:2243)
  at com.android.internal.os.RuntimeInit.crash(RuntimeInit.java:302)
  at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:75)
  at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:887)
  at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:884)
  at dalvik.system.NativeStart.main(Native Method)

"imageCapture" prio=5 tid=17 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 s=N obj=0x432a66f0 self=0x1dc820
  | sysTid=366 nice=0 sched=0/0 handle=1938080
  at java.lang.Object.wait(Native Method)
  - waiting on <0x1c8cd8> (a java.util.Timer$TimerImpl)
  at java.lang.Object.wait(Object.java:326)
  at java.util.Timer$TimerImpl.run(Timer.java:250)

"Binder Thread #3" prio=5 tid=15 NATIVE
  | group="main" sCount=1 dsCount=0 s=N obj=0x4327aa38 self=0x160ea0
  | sysTid=365 nice=0 sched=0/0 handle=1406616
  at dalvik.system.NativeStart.run(Native Method)

"Binder Thread #2" prio=5 tid=13 NATIVE
  | group="main" sCount=1 dsCount=0 s=N obj=0x4327a978 self=0x1609c0
  | sysTid=364 nice=0 sched=0/0 handle=498392
  at dalvik.system.NativeStart.run(Native Method)

"Binder Thread #1" prio=5 tid=11 NATIVE
  | group="main" sCount=1 dsCount=0 s=N obj=0x432799d0 self=0x155268
  | sysTid=363 nice=0 sched=0/0 handle=1397288
  at dalvik.system.NativeStart.run(Native Method)

"JDWP" daemon prio=5 tid=9 VMWAIT
  | group="system" sCount=1 dsCount=0 s=N obj=0x432782a0 self=0x15f788
  | sysTid=361 nice=0 sched=0/0 handle=1614352
  at dalvik.system.NativeStart.run(Native Method)

"Signal Catcher" daemon prio=5 tid=7 RUNNABLE
  | group="system" sCount=0 dsCount=0 s=N obj=0x432781e8 self=0x18a0f0
  | sysTid=360 nice=0 sched=0/0 handle=1614000
  at dalvik.system.NativeStart.run(Native Method)

"HeapWorker" daemon prio=5 tid=5 VMWAIT
  | group="system" sCount=1 dsCount=0 s=N obj=0x422dd3e8 self=0x1177a8
  | sysTid=359 nice=0 sched=0/0 handle=1613728
  at dalvik.system.NativeStart.run(Native Method)`

听起来问题是超时问题,但我不知道应该去哪里找......有人知道吗?

谢谢!

最佳答案

很可能是作为媒体进程一部分的 cameraService 在后台崩溃了。如果您只是尝试在 Android 中运行默认相机应用程序,但它没有显示,则只需重新启动设备即可消除此错误。

关于android - 无法连接到 G1 上的相机服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745688/

有关android - 无法连接到 G1 上的相机服务的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  7. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  10. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

随机推荐