2013-04-07 3 views
0

Я использую zxing IntentIntegrator для сканирования штрих-кода или QR-кода из моего приложения для Android. После сканирования кода мне нужно определить, был ли код кодом QR или штрих-кодом. Я использую следующий код:Android QR/Barcode Reader

public void onActivityResult(int request, int result, Intent i) { 
    IntentResult scan = IntentIntegrator.parseActivityResult(request, result, i); 
    if (scan != null) { 
     format.setText(scan.getFormatName()); 
     contents.setText(scan.getContents()); 
    } 
} 

Однако scan.getFormatName() возвращается в null. Я что-то не так понял?

+0

Опубликовать свой штрих-код? и вы уверены, что вы вызываете сканер штрих-кода по Intent - вы вызываете с IntentIntegrator правильно? –

+0

Да, как вы можете видеть в опубликованном коде, я вызываю 'IntentIntegrator'. Я использую [Генератор QR-кода из проекта ZXing] (http://zxing.appspot.com/generator) для создания этого [QR-кода] (http://chart.apis.google.com/chart?cht= qr & chs = 350x350 & chld = L & choe = UTF-8 & chl = test) с текстовым содержимым – user1135357

+0

Он просто показывает результат здесь, а не вызывает, но хорошо, потому что это исключает некоторые вещи. Что произойдет, если вы используете приложение ZxingTest? Отчитывается ли формат, когда вы сканируете что-нибудь? –

ответ

1

Я не могу воспроизвести это с помощью новейшего сканера штрих-кода и приложения ZXingTest в Google Play. При возврате от сканирования QR-кода, например, formatName является «QR_CODE» и печатает соответственно.

Я все еще подозреваю, что каким-то образом вы запускаете чужое приложение, которое перехватывает наши Intent s. Вы уверены, что на устройстве, которое работает с этим устройством, и, возможно, не возвращается правильно?

Вы уверены, что это не так, scan is null и просто никогда не устанавливаете текст?

+1

Проблема заключалась в файле jar файла IntentIntegrator. Я загрузил еще один файл jar, и он сработал. Если кто-то найдет ту же проблему, вы должны использовать [это пример приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/Camera/ZXing), демонстрируя использование 'IntentIntegrator' – user1135357

0

увидеть этот код

static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN"; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    Button scan=(Button)findViewById(R.id.btn); 
    scan.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


     try { 

Intent intent = new Intent(ACTION_SCAN); 
intent.putExtra("SCAN_MODE", "PRODUCT_MODE"); 
startActivityForResult(intent, 0); 
    } 
catch (ActivityNotFoundException anfe) 
{ 
    Toast.makeText(MainActivity.this,"No scanner found",Toast.LENGTH_SHORT).show(); 

    } 

     } 
    }); 

} 


public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      String contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      Toast toast = Toast.makeText(this, "Content:" + contents + " Format:" + format, Toast.LENGTH_LONG); 
      toast.show(); 
      TextView tv=(TextView)findViewById(R.id.tv); 
      tv.setText("Content:" + contents + " Format:" + format); 
     } 
    } 
} 

в этом изменении intent.putExtra для QR кода и штрих-кодов.