Я пытаюсь создать приложение Glass, которое сканирует штрих-код и использует информацию в штрих-коде для открытия определенного документа.
После проблем со сборкой ZXing из исходного кода для Glass я обратился к уже созданному порту под названием BarcodeEye: https://github.com/BarcodeEye/BarcodeEye
Однако кажется, что BarcodeEye не имеет встроенной поддержки для использования его в качестве намерения. Я добавил намерение-действие в манифест. Это позволяет мне вызывать BarcodeEye из моего приложения, но у меня возникают проблемы с вызовом setResult, чтобы получить результат с текстом моего QR из barcodeEye.
Может ли кто-нибудь с опытом работы с ZXing помочь мне понять, почему результат не возвращается и куда поместить код setResult, чтобы правильно вернуть результат.
Вот код, который я использую для вызова BarcodeEye в своем приложении:
Intent intent = new Intent("com.github.barcodeeye.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");//for Qr code, its "QR_CODE_MODE" instead of "PRODUCT_MODE"
intent.putExtra("SAVE_HISTORY", false);//this stops saving ur barcode in barcode scanner app's history
startActivityForResult(intent, 0);
И вот мой результирующий класс:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = data.getStringExtra("SCAN_RESULT"); //this is the result
Log.v("zxing",contents);
} else
if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
Любая помощь в том, как получить правильный результат деятельности, будет принята с благодарностью.
РЕДАКТИРОВАТЬ:
Я смог заставить его работать, добавив фильтр намерений и поместив возвращаемые данные в класс CaptureActivity.java
. Это работает для меня, поскольку QR, которые меня интересуют, представляют собой только текст, но я не думаю, что мой текущий метод будет работать в некоторых случаях, поскольку он не пропускает его через фильтр, чтобы проверить, какой это тип QR.
Вот мой манифест:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.chut.glass.xively"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher_xi"
android:label="@string/app_name" >
<uses-library
android:name="com.google.android.glass"
android:required="true" />
<activity
android:name="com.chut.glass.xively.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/voice_trigger" />
</activity>
<service android:name="com.jessefarebro.mqtt.MqttService" android:exported="false" />
</application>
</manifest>
Вот где я закончил возвращать данные в CaputreActivity:
// Put up our own UI for how to handle the decoded contents.
private void handleDecodeInternally(Result rawResult, Bitmap barcode) {
Uri imageUri = null;
String imageName = IMAGE_PREFIX + System.currentTimeMillis() + ".png";
Log.v(TAG, "Saving image as: " + imageName);
try {
imageUri = mImageManager.saveImage(imageName, barcode);
} catch (IOException e) {
Log.e(TAG, "Failed to save image!", e);
}
ResultProcessor<?> processor = ResultProcessorFactory
.makeResultProcessor(this, rawResult, imageUri);
Intent data = new Intent();
data.putExtra("SCAN_RESULT", rawResult.toString());
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
Log.v(TAG,"parent null");
} else {
Log.v(TAG,"parent: " + getParent());
getParent().setResult(Activity.RESULT_OK, data);
}
Log.v(TAG,"about to finish");
finish();
Log.v(TAG,"post finish");
//startActivity(ResultsActivity.newIntent(this, processor.getCardResults(), imageUri));
}