奇怪的三星Galaxy S相机预览

时间:2011-03-09 07:33:33

标签: android android-camera

我使用与Google的Camera app代码完全相同的代码,但结果却非常奇怪。在我的应用程序和来自Google的Camera应用程序中,预览会被卡住,或者被怪异的线条所覆盖。预览通常是我在手机自己的相机应用程序中看到的最后一件事。

三星型号是I9003。在三星刚刚停产的I9000上,相同的代码运行良好。该代码也适用于HTC Wildfire。

对此有何决议?


注意到在我的应用程序中拍摄照片后,相机预览变得正常。 Google相机应用程序也发生了同样的事情。

1 个答案:

答案 0 :(得分:0)

无法提前发布答案。不确定这是否是正确的做法,但现在应用程序在大约150台设备上运行正常,我想这可行。

因此onCreate函数中的Android相机应用程序具有以下代码:

         /*
         * To reduce startup time, we start the preview in another thread.
         * We make sure the preview is started at the end of onCreate.
         */
        Thread startPreviewThread = new Thread(new Runnable() {
            public void run() {
                try {
                    mStartPreviewFail = false;
                    startPreview();
                } catch (CameraHardwareException e) {
                    // In eng build, we throw the exception so that test tool
                    // can detect it and report it
                    if ("eng".equals(Build.TYPE)) {
                        throw new RuntimeException(e);
                    }
                    mStartPreviewFail = true;
                }
            }
        });
        startPreviewThread.start();

出于某种原因,这对GT-I9003无效。我注意到的是,拍照后预览会正常进行,因此硬件没有任何问题。我试图回溯拍摄照片后发生的事情,然后将其与首次初始化相机的代码进行比较。我从onCreate中注释掉了这段代码。来自相机应用程序的onResume看起来像这样:

if (mSurfaceHolder != null) {
   // If first time initialization is not finished, put it in the
   // message queue.
   if (!mFirstTimeInitialized) {
      mHandler.sendEmptyMessage(FIRST_TIME_INIT);
   } else {
      initializeSecondTime();
   }
}

我将其更改为:

        if (!mFirstTimeInitialized) {
            initializeFirstTime();
        } else {
            initializeSecondTime();
        }

还有其他一些变化,很快就会把它作为一个单独的应用程序放在GitHub上。