44

Google アナリティクスがインストールされた Google Play ストアにカメラ アプリがあります。次のクラッシュ レポートを取得し続けます。

getParameters が失敗しました (空のパラメーター)

私の質問は次のとおりです。これを処理する正しい方法は何ですか?

それが発生する場所の Android ソースを調べても、それ以上の詳細はわかりませんでした。android_hardware_Camera.cpp でエラーがスローされます。

String8 params8 = camera->getParameters();
if (params8.isEmpty()) {
    jniThrowRuntimeException(env, "getParameters failed (empty parameters)");
    return 0;
}

オープンソースの Android カメラを調べて、状況をどのように処理するかを確認することもあまり役に立ちませんでした。そのコードは、getParameters を呼び出すときに RuntimeException をキャッチしていないようです。(彼らがそれをキャッチし、カメラを閉じてから再スローする1つのケースを除いて).

これを処理する正しい方法はありますか?

そうでない場合、これが頻繁に発生する理由はありますか?

注: 任意の日に 5,000 ~ 8,000 人のアクティブ ユーザーがいます。これらの例外の 40 ~ 70 の間のどこかで。それは私には本当に高いようです。カメラの初期化に失敗する正当な例があることは知っています。しかし、ユーザーの 1% は理不尽に思えます。また、Android のカメラ アプリは例外を処理しないため、根本的な原因が他にあるのではないかと考えてしまいます。

4

4 に答える 4

36

私の場合、このエラーが発生していました:

getParameters が失敗しました (空のパラメーター)

getParameters()カメラのロックを解除した後に電話したとき。そのため、電話getParameters()する前に電話してくださいcamera.unlock()

于 2014-02-25T08:44:43.017 に答える
29

+Eddy Talvala が述べたように、これはカメラの状態が悪い場合に発生します。

カメラはどのように悪い状態になりますか?

1) おそらく最も一般的な理由は、カメラを使用中にカメラを閉じたり離したりすることです。Cameraへのアクセスを同期せずに複数のスレッドでオブジェクトを使用している場合、これは特に問題になる可能性がありますCamera。一度に にアクセスするスレッドが 1 つだけであることを確認してくださいCamera

2) 私の場合は、もう少しトリッキーでした。SurfaceTextureカメラ出力を OpenGL テクスチャとして使用できるように を使用します。Android 4.0 (ICS) では、新しいメソッドがありSurfaceTexture.release()ます。このメソッドは、SurfaceTextures を使用する場合に使用することが重要です。これは、以前よりも速くメモリをクリーンアップするためです。

SurfaceTexture.release()問題は、カメラのプレビューがまだアクティブなときに呼び出しを行ったことです。これによりサービスがクラッシュしCamera、質問で説明されている問題が発生していました。

私の場合SurfaceTexture.release()、新しい に置き換えた後までへの呼び出しを遅らせることで修正しましたSurfaceTextureSurfaceTextureこのようにして、悪い副作用なしにクリーンアップできると確信していました.

于 2013-04-20T17:51:15.257 に答える
3

このエラーが発生する特定の Android デバイスはありますか? それとも、多くのデバイスで見られますか。

通常、この種のエラーは表示されません。アプリケーションにある種の競合状態があり、これが原因である可能性がありますが、初期化されていないカメラまたは既にリリースされているカメラで getParameters を呼び出そうとする必要があります。

また、デバイス固有のカメラ コードのエラー、またはカメラ コード スタックのどこかでまれな競合状態である可能性もあります。詳細 (そのようなクラッシュからの logcat または Android バグレポート) がなければ、それを伝えることは不可能です。エラー自体は、デバイス固有のカメラ コードが空のパラメーター セットを返したことを示しているだけです。

しかし、このエラーが発生すると、できることは多くありません。カメラ サブシステムが奇妙な状態になっているためです。対処したい場合は、カメラ デバイスを閉じてから再度開くことをお勧めします。

于 2013-02-18T19:39:37.983 に答える
1

カメラ オブジェクトは常にデフォルトでロックされているため、メソッドのロックを解除できる場合は、他のプロセスがパラメーターを使用できるようにするため、パラメーターを取得する前にカメラを再度ロックしてください。

于 2016-08-08T13:31:05.813 に答える