Java zxing条形码扫描仪未返回结果
我正在尝试让这个应用程序扫描一本书的ISBC,然后发出http请求获取书的标题和其他详细信息 我用rootView.findViewById(R.id.scan_按钮)启动了这个应用程序。现在我想记录条形码和代码格式,以确保它在onActivityResult中工作,但它不是记录或祝酒词。摄像机聚焦于代码并返回视图后,摄像机活动关闭,在视图中,我有启动扫描功能的按钮,但不记录任何内容或制作任何祝酒词。我使用了这个教程——之前我看到了zXing是如何工作的,并且这个教程工作得非常完美,现在我正在尝试实现一些代码Java zxing条形码扫描仪未返回结果,java,android,zxing,barcode-scanner,Java,Android,Zxing,Barcode Scanner,我正在尝试让这个应用程序扫描一本书的ISBC,然后发出http请求获取书的标题和其他详细信息 我用rootView.findViewById(R.id.scan_按钮)启动了这个应用程序。现在我想记录条形码和代码格式,以确保它在onActivityResult中工作,但它不是记录或祝酒词。摄像机聚焦于代码并返回视图后,摄像机活动关闭,在视图中,我有启动扫描功能的按钮,但不记录任何内容或制作任何祝酒词。我使用了这个教程——之前我看到了zXing是如何工作的,并且这个教程工作得非常完美,现在我正在尝
rootView.findViewById(R.id.scan_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
scanIntegrator.setBeepEnabled(true);
scanIntegrator.setBarcodeImageEnabled(true);
scanIntegrator.setPrompt("Scan a barcode");
scanIntegrator.initiateScan();
}
});
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
//retrieve scan result
IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanningResult != null) {
//we have a result
String scanContent = scanningResult.getContents();
String scanFormat = scanningResult.getFormatName();
formatTxt.setText("FORMAT: " + scanFormat);
contentTxt.setText("CONTENT: " + scanContent);
Log.i("FORMAT ", scanFormat);
Log.i("CONTENT", scanContent);
Log.i("xZing", "contents: "+scanContent+" format: "+scanFormat);
Toast.makeText(getActivity(), "FORMAT " + scanFormat + " CONTENT " + scanContent, Toast.LENGTH_LONG).show();
}else{
Toast toast = Toast.makeText(getActivity(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
}
完整代码
公共类AddBook扩展片段实现LoaderManager.LoaderCallbacks{
私有静态最终字符串标记=“意图扫描活动”;
私人编辑;
私有最终整数加载器_ID=1;
私有视图rootView;
私有最终字符串EAN_CONTENT=“eanContent”;
专用静态最终字符串扫描\u FORMAT=“scanFormat”;
私有静态最终字符串扫描\u CONTENTS=“scanContents”;
私有字符串mScanFormat=“格式:”;
私有字符串mScanContents=“Contents:”;
专用按钮扫描;
私有文本视图格式txt,contentTxt;
公共地址簿(){
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
如果(ean!=null){
outState.putString(EAN_CONTENT,EAN.getText().toString());
}
}
@凌驾
创建视图上的公共视图(最终布局扁平充气机、视图组容器、捆绑包保存状态){
rootView=充气机。充气(R.layout.fragment\u add\u book,container,false);
ean=(EditText)rootView.findViewById(R.id.ean);
formatTxt=(TextView)rootView.findViewById(R.id.scan_格式);
contentTxt=(TextView)rootView.findViewById(R.id.scan\u content);
ean.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
//没必要
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
//没必要
}
@凌驾
公共无效后文本已更改(可编辑){
字符串ean=s.toString();
//捕捉isbn10数字
如果(ean.length()==10&&!ean.startsWith(“978”)){
ean=“978”+ean;
}
如果(平均长度()<13){
clearFields();
返回;
}
//一旦我们有了ISBN,就开始写一本书
Intent bookIntent=newintent(getActivity(),BookService.class);
bookIntent.putExtra(BookService.EAN,EAN);
bookIntent.setAction(BookService.FETCH_BOOK);
getActivity().startService(bookIntent);
AddBook.this.restartLoader();
}
});
rootView.findviewbyd(R.id.scan_按钮).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
IntentIntegrator scanIntegrator=新的IntentIntegrator(getActivity());
scanIntegrator.setBeepEnabled(真);
scanIntegrator.setBarcodeImageEnabled(真);
scanigrator.setPrompt(“扫描条形码”);
scanIntegrator.initiateScan();
}
});
rootView.findviewbyd(R.id.save_按钮).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
ean.setText(“”);
}
});
rootView.findViewById(R.id.delete_按钮).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent bookIntent=newintent(getActivity(),BookService.class);
bookIntent.putExtra(BookService.EAN,EAN.getText().toString());
bookIntent.setAction(BookService.DELETE_BOOK);
getActivity().startService(bookIntent);
ean.setText(“”);
}
});
如果(savedInstanceState!=null){
ean.setText(savedInstanceState.getString(ean_内容));
ean.setHint(“”);
}
返回rootView;
}
ActivityResult上的公共void(int请求代码、int结果代码、意图){
//检索扫描结果
IntentResult scanningResult=IntentIntegrator.parseActivityResult(请求代码、结果代码、意图);
如果(扫描结果!=null){
//我们有一个结果
字符串scanContent=scanningResult.getContents();
字符串scanFormat=scanningResult.getFormatName();
formatTxt.setText(“格式:”+scanFormat);
contentTxt.setText(“内容:+scanContent”);
Log.i(“格式”,scanFormat);
Log.i(“内容”,scanContent);
Log.i(“xZing”,“内容:+scanContent+”格式:+scanFormat);
Toast.makeText(getActivity(),“FORMAT”+scanFormat+“CONTENT”+scanContent,Toast.LENGTH_LONG).show();
}否则{
Toast Toast=Toast.makeText(getActivity(),
“未收到扫描数据!”,Toast.LENGTH\u SHORT);
toast.show();
}
public class AddBook extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String TAG = "INTENT_TO_SCAN_ACTIVITY";
private EditText ean;
private final int LOADER_ID = 1;
private View rootView;
private final String EAN_CONTENT="eanContent";
private static final String SCAN_FORMAT = "scanFormat";
private static final String SCAN_CONTENTS = "scanContents";
private String mScanFormat = "Format:";
private String mScanContents = "Contents:";
private Button scanBtn;
private TextView formatTxt, contentTxt;
public AddBook(){
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(ean!=null) {
outState.putString(EAN_CONTENT, ean.getText().toString());
}
}
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_add_book, container, false);
ean = (EditText) rootView.findViewById(R.id.ean);
formatTxt = (TextView)rootView.findViewById(R.id.scan_format);
contentTxt = (TextView)rootView.findViewById(R.id.scan_content);
ean.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//no need
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//no need
}
@Override
public void afterTextChanged(Editable s) {
String ean = s.toString();
//catch isbn10 numbers
if (ean.length() == 10 && !ean.startsWith("978")) {
ean = "978" + ean;
}
if (ean.length() < 13) {
clearFields();
return;
}
//Once we have an ISBN, start a book intent
Intent bookIntent = new Intent(getActivity(), BookService.class);
bookIntent.putExtra(BookService.EAN, ean);
bookIntent.setAction(BookService.FETCH_BOOK);
getActivity().startService(bookIntent);
AddBook.this.restartLoader();
}
});
rootView.findViewById(R.id.scan_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
scanIntegrator.setBeepEnabled(true);
scanIntegrator.setBarcodeImageEnabled(true);
scanIntegrator.setPrompt("Scan a barcode");
scanIntegrator.initiateScan();
}
});
rootView.findViewById(R.id.save_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ean.setText("");
}
});
rootView.findViewById(R.id.delete_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent bookIntent = new Intent(getActivity(), BookService.class);
bookIntent.putExtra(BookService.EAN, ean.getText().toString());
bookIntent.setAction(BookService.DELETE_BOOK);
getActivity().startService(bookIntent);
ean.setText("");
}
});
if(savedInstanceState!=null){
ean.setText(savedInstanceState.getString(EAN_CONTENT));
ean.setHint("");
}
return rootView;
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
//retrieve scan result
IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanningResult != null) {
//we have a result
String scanContent = scanningResult.getContents();
String scanFormat = scanningResult.getFormatName();
formatTxt.setText("FORMAT: " + scanFormat);
contentTxt.setText("CONTENT: " + scanContent);
Log.i("FORMAT ", scanFormat);
Log.i("CONTENT", scanContent);
Log.i("xZing", "contents: "+scanContent+" format: "+scanFormat);
Toast.makeText(getActivity(), "FORMAT " + scanFormat + " CONTENT " + scanContent, Toast.LENGTH_LONG).show();
}else{
Toast toast = Toast.makeText(getActivity(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
}
// Checks for network connection
public boolean checkNetworkConnection(){
ConnectivityManager cm =
(ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
return isConnected;
}
private void restartLoader(){
getLoaderManager().restartLoader(LOADER_ID, null, this);
}
@Override
public android.support.v4.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
if(ean.getText().length()==0){
return null;
}
String eanStr= ean.getText().toString();
if(eanStr.length()==10 && !eanStr.startsWith("978")){
eanStr="978"+eanStr;
}
return new CursorLoader(
getActivity(),
AlexandriaContract.BookEntry.buildFullBookUri(Long.parseLong(eanStr)),
null,
null,
null,
null
);
}
@Override
public void onLoadFinished(android.support.v4.content.Loader<Cursor> loader, Cursor data) {
if (!data.moveToFirst()) {
return;
}
String bookTitle = data.getString(data.getColumnIndex(AlexandriaContract.BookEntry.TITLE));
((TextView) rootView.findViewById(R.id.bookTitle)).setText(bookTitle);
String bookSubTitle = data.getString(data.getColumnIndex(AlexandriaContract.BookEntry.SUBTITLE));
((TextView) rootView.findViewById(R.id.bookSubTitle)).setText(bookSubTitle);
String authors = data.getString(data.getColumnIndex(AlexandriaContract.AuthorEntry.AUTHOR));
String[] authorsArr = authors.split(",");
((TextView) rootView.findViewById(R.id.authors)).setLines(authorsArr.length);
((TextView) rootView.findViewById(R.id.authors)).setText(authors.replace(",","\n"));
String imgUrl = data.getString(data.getColumnIndex(AlexandriaContract.BookEntry.IMAGE_URL));
if(Patterns.WEB_URL.matcher(imgUrl).matches()){
new DownloadImage((ImageView) rootView.findViewById(R.id.bookCover)).execute(imgUrl);
rootView.findViewById(R.id.bookCover).setVisibility(View.VISIBLE);
}
String categories = data.getString(data.getColumnIndex(AlexandriaContract.CategoryEntry.CATEGORY));
((TextView) rootView.findViewById(R.id.categories)).setText(categories);
rootView.findViewById(R.id.save_button).setVisibility(View.VISIBLE);
rootView.findViewById(R.id.delete_button).setVisibility(View.VISIBLE);
}
@Override
public void onLoaderReset(android.support.v4.content.Loader<Cursor> loader) {
}
private void clearFields(){
((TextView) rootView.findViewById(R.id.bookTitle)).setText("");
((TextView) rootView.findViewById(R.id.bookSubTitle)).setText("");
((TextView) rootView.findViewById(R.id.authors)).setText("");
((TextView) rootView.findViewById(R.id.categories)).setText("");
rootView.findViewById(R.id.bookCover).setVisibility(View.INVISIBLE);
rootView.findViewById(R.id.save_button).setVisibility(View.INVISIBLE);
rootView.findViewById(R.id.delete_button).setVisibility(View.INVISIBLE);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
activity.setTitle(R.string.scan);
}
}
enter code here