Невозможно получить результат от сканера штрих-кода ZXing

Я пытаюсь реализовать работу сканера штрих-кода в своем приложении для Android, но слышал, что это невозможно сделать, не попросив пользователя установить сканер штрих-кода ZXing.

Итак, что я сделал, так это то, что я использовал класс интегратора ZXing для запуска сканирования, вот мой код. Но я не могу показать результат в двух текстовых представлениях. Я должен упомянуть, что сканирование запускается, и результат отображается в самом окне сканера штрих-кода, но тогда ничего не появляется в макете ScanCodeActivity, который имеет два текстовых представления на нем.

Я также хотел бы знать, можно ли вернуть результат из веб-сайта в мои текстовые представления.

Я использовал эту ссылку как ссылку: http://code.tutsplus.com/tutorials/android-sdk-create-a-barcode-reader--mobile-17162

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

public class ScanCodeActivity extends Activity {

    private Button scan;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.scancodelayout);

        scan= (Button)findViewById(R.id.scan_button);

        Button scanBtn  = (Button)findViewById(R.id.scan_button);
        final TextView  formatTxt = (TextView)findViewById(R.id.scan_format);
        final TextView contentTxt = (TextView)findViewById(R.id.scan_content);

        scanBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                IntentIntegrator scanIntegrator = new IntentIntegrator(ScanCodeActivity.this);
                scanIntegrator.initiateScan();
            }
        });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
           if (requestCode == 0) {
               IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
               if (resultCode == RESULT_OK) {
                   if (scanningResult != null) {
                       final TextView  formatTxt = (TextView)findViewById(R.id.scan_format);
                       final TextView contentTxt = (TextView)findViewById(R.id.scan_content);
                       String scanContent = scanningResult.getContents();
                       String scanFormat = scanningResult.getFormatName();
                       Toast toast = Toast.makeText(this, "Content:" + scanContent + " Format:" + scanFormat , Toast.LENGTH_LONG);

                       formatTxt.setText("FORMAT: " + scanFormat);
                       contentTxt.setText("CONTENT: " + scanContent);
                     //we have a result
                     }
                   else{
                        Toast toast = Toast.makeText(getApplicationContext(), 
                            "No scan data received!", Toast.LENGTH_SHORT);
                        toast.show();
                    }
               } else if (resultCode == RESULT_CANCELED) {
                  // Handle cancel
                  Log.i("App","Scan unsuccessful");
               }
         }
      }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

person Asim Gulzar    schedule 17.08.2014    source источник
comment
Ваш onActivityResult называется? Вы уверены, что requestCode равно 0?   -  person cygery    schedule 17.08.2014


Ответы (1)


Удалите if (requestCode == 0) проверку из своего onActivityResult() метода, как в примере с вики-страницы .

Примечание: вы проверяете неправильный requestCode. В библиотеке используется 0x0000c0de (см. источник) вместо 0.

person cygery    schedule 17.08.2014
comment
Это было очень полезно, теперь у меня есть еще один вопрос - person Asim Gulzar; 17.08.2014
comment
Как я могу сравнить значение, возвращаемое сканером, со строковым массивом? я хочу знать, соответствует ли значение, возвращаемое сканером в Content, любому из значений в моем строковом массиве, инициализированном в том же ScanCodeActivity - person Asim Gulzar; 17.08.2014
comment
Вы можете перебирать все элементы в этом массиве и сравнивать возвращаемое значение с каждым элементом, пока не найдете совпадение или не проверите все элементы, не найдя совпадения. - person cygery; 17.08.2014
comment
Большое спасибо, ваш ответ за то, что частично полезно приложение сканера только читает код и говорит простой текст, но ничего не показывает в текстовом представлении ... обычно приложения сканера отображают результаты из Интернета, это ничего не показывает ... как я могу заставить его отображать результат из Интернета и повторный запуск, который приводит к моему текстовому представлению ... - person Asim Gulzar; 17.08.2014
comment
Я не уверен, что именно вы хотите, но, возможно, вы захотите задать новый вопрос. - person cygery; 17.08.2014
comment
приложение zing, доступное в игровом магазине, когда оно сканирует штрих-код, оно показывает вариант для веб-поиска .. но мое приложение запускает приложение сканера zing, а также считывает штрих-код .. если я отменяю сканирование, отмененное сообщение устанавливается в текстовое представление .. но если Я продолжаю сканирование, код идентифицируется, но не отображается в текстовом виде. он просто высветил код и вернулся к моей деятельности. я хочу иметь возможность запускать веб-поиск по идентифицированному штрих-коду? - person Asim Gulzar; 17.08.2014
comment
scanningResult.getContents() возвращает null или пустую строку или что? - person cygery; 17.08.2014
comment
Я не знаю, что он возвращает, потому что я экспортирую apk и тестирую его на своем устройстве. Я не могу протестировать на emualtor, потому что у него действительно есть камера для сканирования штрих-кода. Я также не могу протестировать на живом устройстве, подключенном к eclipse, потому что я не настроил его. . но если я отменю сканирование ... сообщение отменено отображается в текстовом окне - person Asim Gulzar; 17.08.2014