Поскольку у меня нет G1 для целей разработки, я прилагаю все усилия с эмулятором.
При этом я пытаюсь отсканировать изображение JPEG или изображение PNG на своей SD-карте с помощью библиотеки ZXing (Zebra Zrossing).
Я попытался изменить код в проекте Android, чтобы он сканировал изображение с SD-карты, а не с камеры, без какой-либо удачи.
То, что я сделал дальше, возможно, является корнем моей проблемы.
Я пытался использовать код JAVASE в новом проекте Android для предоставления изображения «модифицированному» CommandLineRunner, и вот что:
Eclipse создаст проект, но не запустит его.
В журнале виртуальных машин меня это сообщение вызывает среди прочих:
** 02-08 20: 47: 45.916: WARN / dalvikvm (619): VFY: невозможно разрешить статический метод 939: Ljavax / imageio / ImageIO; .read (Ljava / io / File;) Ljava / awt / изображение / BufferedImage;
02-08 20: 47: 45.926: WARN / dalvikvm (619): VFY: отклонение кода операции 0x71 в 0x0004
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 / языки / String;
02-08 20: 47: 45.926: WARN / dalvikvm (619): верификатор отклонен, класс Lcom / magoco / fread / FRead;
02-08 20: 47: 45.926: WARN / dalvikvm (619): сбой инициализации класса при вызове newInstance (Lcom / magoco / fread / FRead;)
02-08 20: 47: 45.926: DEBUG / AndroidRuntime (619): выключение виртуальной машины
02-08 20: 47: 45.926: WARN / dalvikvm (619): threadid = 3: выход из потока с необработанным исключением (группа = 0x40010e28)
02-08 20: 47: 45.937: ОШИБКА / AndroidRuntime (619): обработчик Uncaught: выход из основного потока из-за необработанного исключения
02-08 20: 47: 45.946: ОШИБКА / AndroidRuntime (619): java.lang.VerifyError: com.magoco.fread.FRead
**
Я искал в Интернете ответ, и мне кто-то сказал, что это распространенная ошибка в Dalvikvm из-за того, что может быть класс или библиотека, которые были предварительно скомпилированы (правда, вне Eclipse), и виртуальная машина не будет ' не сможет его использовать.
Я публикую свой код в основной деятельности:
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