1

私が構築しているアプリケーションは、zxing ライブラリを利用して 1D および 2D バーコードをスキャンします。現在、Galaxy S3 でアプリをテストしていますが、zxing バーコード スキャナー アプリを手動で、または IntentIntegrator ライブラリから開くたびに、画像のデコードに成功した後にバーコード スキャナーがクラッシュします。プロジェクト外でエラーが発生しているため、スタック トレースを表示できません。

デバイスでこのエラーを再現できた人はいますか? また、問題の原因や修正方法を知っている人はいますか?

これで十分な情報が得られない場合は、ソースをダウンロードして自分でビルドし、スタック トレースから問題を特定することもできます。

4

2 に答える 2

0

Barcode Scanner+での実装を見てみると、新しいクリップボード API を試して、これを試すことをお勧めします。

ClipboardManager manager = ...;
manager.setPrimaryClip(ClipData.newPlainText(null, "your text here"));

これは、以降の Android バージョンで新しい API を使用できる場合にのみ使用できます。

私の以前のコメントによるNullPointerExceptionと、コピーが重要でない場合は、いつでもキャッチして続行できます。適切な対策として、ソースのもう 1 か所でそれを行います。

于 2013-01-20T00:01:52.800 に答える
0

よし、プロジェクト ソースをダウンロードしてビルドし、自分のデバイスで実行して、問題を発見しました。この問題は、CaptureActivity が情報をシステムのクリップボードに入れるという事実に関連しています。

Galaxy S3 での開発中の私の経験では、Samsung のクリップボード サービスの実装で複数の問題に遭遇しました。つまり、クリップボード サービスを取得する要求が null を返すという事実です。

とにかく、ZXing の CaptureActivity 内には、次のコード行があります。

if (copyToClipboard && !resultHandler.areContentsSecure()) {
  ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
  if (displayContents != null) {
    clipboard.setText(displayContents);
  }
}

残念ながら、クリップボード変数が null であるため、アプリケーションは null ポインター例外でクラッシュします。コードのこの部分をコメントアウトしたところ、アプリケーションは問題なく動作するように見えました。ここにヌルチェックを追加するだけで、S3 での問題を防ぎながら、他のデバイスで機能を維持できると思います。また、アプリケーションの他の部分は、このデータがクリップボードに入力されることに依存していないと想定しています。ただし、アプリケーションのソース コードのすべてに精通しているわけではないので、これについては確信が持てません。

ZXing を自分のプロジェクトに統合する試みを続け、この修正が機能するかどうかを確認します。

今、誰か (Samsung だと思います) だけが S3 のクリップボードの実装を修正してくれるなら!

アップデート:

この問題に対していくつかの回避策を試しました。単純な null チェックや非推奨でないメソッド (zxing は現在非推奨のクリップボード メソッドを使用しています) の使用などですが、残念ながらどれもうまくいきませんでした。null であるのは ClipboardManager 自体ではなく、null である内部のメンバー変数のようです。繰り返しますが、これは S3 に固有のものであると推測しています。これは、この問題が発生した唯一の電話です。

残念ながら、私にとって現在の最良の選択肢は、クリップボードへの参照を完全に削除することです。

于 2013-01-19T20:01:01.637 に答える