私は開発用のG1を所有していないので、エミュレーターで最善を尽くしています。そうは言っても、ZXing(Zebra Zrossing)ライブラリを使用して、SDカード内のJPEG画像またはPNG画像をスキャンしようとしています。
Androidプロジェクトのコードを変更しようとしたので、運が悪ければ、カメラからではなく、sdCardの画像からスキャンされました。
次にやったことは、おそらく私の問題の根源です。
新しいAndroidプロジェクト内でJAVASEコードを使用して、「変更された」CommandLineRunnerに画像を提供しようとしましたが、次のようになります。
Eclipseはプロジェクトをビルドしますが、実行しません。VMログには、特に次のメッセージが表示されます。
** 02-08 20:47:45.916:WARN / dalvikvm(619):VFY:静的メソッド939を解決できません:Ljavax / imageio / ImageIO; .read(Ljava / io / File;)Ljava / awt / image / BufferedImage ; 02-08 20:47:45.926:WARN / dalvikvm(619):VFY:0x0004でオペコード0x71を拒否します02-08 20:47:45.926:WARN / dalvikvm(619):VFY:拒否されたLcom / magoco / fread / FRead; .decode2(Ljava / io / File; Ljava / util / Hashtable; Ljava / lang / String;)Ljava / lang / String; 02-08 20:47:45.926:警告/ dalvikvm(619):ベリファイアはクラスLcom / magoco / fread/FReadを拒否しました。02-08 20:47:45.926:警告/ dalvikvm(619):クラスの初期化がnewInstance呼び出しで失敗しました(Lcom / magoco / fread / FRead;)02-08 20:47:45.926:DEBUG / AndroidRuntime(619):シャットダウンVM 02-08 20:47:45.926:警告/ dalvikvm(619):threadid = 3:キャッチされない例外でスレッドが終了します(group = 0x40010e28)02-08 20:47:45.937:エラー/ AndroidRuntime(619):キャッチされないハンドラー:
Webで回答を検索したところ、プリコンパイルされたクラスまたはライブラリが存在する可能性があり(true、Eclipseの外部)、VMが使用できないため、これはDalvikvmで一般的なエラーであるとの回答がありました。それを使用します。
メインのアクティビティにコードを投稿しています:
package com.magoco.fread;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.TextView;
import com.google.zxing.DecodeHintType;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.result.ParsedResult;
import com.google.zxing.client.result.ResultParser;
public class FRead extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) this.findViewById(R.id.BarcodeResult);
try {
tv.setText(this.decodeOneArgument2("", false));
} catch (Exception e) {
e.printStackTrace();
}
}
public String decodeOneArgument2(String argument, boolean dumpResults)
throws Exception {
String barcode = "";
// File inputFile = new File(argument);
File inputFile = new File("sdcard/dcim/pueblo.JPG");
/* TESTING THAT I'VE GOT A FILE */
System.out.println("FILE " + inputFile.toString());
// decode(new URI(argument), hints);
decode2(inputFile, null, barcode);
return barcode;
}
public String decode2(File f, Hashtable<DecodeHintType, Object> hints,
String barcode) throws IOException {
/* IF I COMMENT THE NEXT LINE, IT RUNS BUT OF COURSE NO RESULT */
BufferedImage image;
try {
image = ImageIO.read(f);
} catch (IllegalArgumentException iae) {
throw new FileNotFoundException("Resource not found: " + f);
}
try {
MonochromeBitmapSource source = new BufferedImageMonochromeBitmapSource(
image);
Result result = new MultiFormatReader().decode(source, hints);
ParsedResult parsedResult = ResultParser.parseResult(result);
barcode = " format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult();
System.out.println(" format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult());
//return result;
} catch (ReaderException e) {
System.out.println(": No barcode found");
return null;
}
return barcode;
}
}
前もって感謝します
monn3t