head_hexagonはにらぼ☆てっくtale_hexagon
Tag » Android
ブログ画像

Androidでバーコードリーダーを実装する

こんにちは、nagashimaです。今回はAndroidのお話をします。 今作っているアプリにバーコードリーダーの機能を入れる必要がありライブラリを調べました。
やりたいことは次の3つ
・1次元/2次元バーコードが読める
・画面上のボタン操作でライトのON/OFFができる
・バーコードの読み込みは画面中央部の指定エリアのみ まず出てきたのがZXingです。zxing-android-embeddedという拡張ライブラリを使うことで簡単にバーコードを読むことができます。 build.gradleにcompile ‘com.journeyapps:zxing-android-embedded:3.4.0’を追加して IntentIntegrator integrator = new IntentIntegrator(this); integrator.initiateScan(); で呼び出すことでスキャン画面を呼び出すことができます。
バーコードの解析結果はonActivityResultで取得します。 protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (scanResult != null) { Log.d(TAG, scanResult.getContents()); } } IntentIntegratorに各種セッターがあるのでカメラの設定も簡単にできました。 ただ問題が…。ZXingの1次元バーコードの読み取りは方向固定なので、バーコードが縦になっていると読めないみたいです。 他のライブラリを探しているとGoogle Play serviceに含まれているという記事を見かけ調べてみました。
サンプルも公開されているので、これを見つつ実装。 build.gradleにcompile ‘com.google.android.gms:play-services-vision:10.2.0’を追加して BarcodeDetector barcodeDetector = new BarcodeDetector .Builder(this) .build(); barcodeDetector.setProcessor(new Detector.Processor() { @Override public void release() {

} @Override public void receiveDetections(Detector.Detections detections) { if (detections.getDetectedItems().size() != 0) { for(int i = 0; i< detections.getDetectedItems().size(); i++){ Barcode barcode = detections.getDetectedItems().valueAt(i); Log.d(TAG,barcode.displayValue); } } }
}); CameraSource cameraSource = new CameraSource .Builder(getApplicationContext(), barcodeDetector) .build(); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { cameraSource.start(surfaceView.getHolder()); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
} @Override public void surfaceDestroyed(SurfaceHolder holder) { cameraSource.stop(); cameraSource.release(); }
}); バーコードの解析結果を受け取る”BarcodeDetector”とカメラをラップした”CameraSource”を、SurfaceViewと紐付けるだけなのですが、CameraSourceが曲者でした。 AndroidでライトはCameraの機能の一部なので、Cameraの操作が必要なのですが、CameraSourceにはライトを操作するような関数が用意されてなく…。サンプルをよく調べるとCameraSourceを自前で持っていて、そこでライトのON/OFFの制御をしていたようです。なので同じように自前でCameraSourceを作りそこでライトを操作するようにしました。そのうちvisionのCameraSourceにもこのあたりが追加されるのでしょうかね?

Posted by nagashima on 2017/05/30 under Development

ブログ画像

RxAndroid + OkHttp + retrofit + gsonが便利すぎた

こんにちはkasugaです。 一年ぶりぐらいにandroidをさわったら
RxAndroid + OkHttp + retrofit + gsonが便利すぎました。
(さらに…)

Posted by kasuga on 2015/07/28 under Development

cocos2d-xでクロスプラットフォーム開発環境の構築

iOS、Androidのクロスプラットフォーム開発用にcocos2d-xの開発環境を構築したのでメモ。目指すものとしては以下のような感じのものです。 iOS/Androidのアプリを開発できる環境(当たり前) リソース、ソースコードはできるかぎり共有 使用言語はC/C++ メインの開発環境はXcode+iPhoneシミュレータで確認→Android用にもビルド、とできるようにしたい(eclipseよりXcodeの方が軽いしC/C++が書きやすいから) 以下に環境を構築する手順をメモしておきます。 (さらに…)

Posted by kiyokazk on 2013/01/29 under Development