0

GoogleのCameraアプリコードとほぼ同じコードを使用していますが、非常に奇妙な結果が得られています。私のアプリケーションとGoogleのカメラアプリの内部で、プレビューが動かなくなったり、奇妙な線で覆われたりします。プレビューは通常、携帯電話のカメラアプリで最後に表示されるものです。

サムスンのモデルはI9003です。同じコードは、Samsungが廃止したばかりのI9000でも正常に動作しました。このコードは、HTCWildfireでも正常に機能します。

これに対する解決策はありますか?


アプリケーション内で写真を撮った後、カメラのプレビューが正常になることに気づきました。Googleカメラアプリケーションでも同じことが起こっています。

4

1 に答える 1

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に掲載される予定です。

于 2011-05-11T22:53:22.993 に答える