Nano Hash - криптовалюты, майнинг, программирование

получить данные zxing во фрагмент просмотра смахивания

Я использую zxing во фрагменте вкладки viewpager. Я могу вызвать zxing с намерением и прочитать QR-код, но я не могу получить результат в тексте редактирования.

Здесь я создаю вкладку в FragmentPagerAdapter:

@Override
    public Fragment getItem(int i) {
        switch (i) {
        case 0:
            return new Tab1();
        case 1:
            return new Tab2();
        default:
            return new EmptyTab();
        }
    }

И мой класс Tab1:

public class Tab1 extends Fragment {
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab_1, container, false);
        IDEditText = (EditText) rootView.findViewById(R.id.fttx_id_editText);

        Button scanBarcode = (Button) rootView.findViewById(R.id.scan_barcode);

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

        return rootView;
    }



    @Override
    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();
            IDEditText .setText("CONTENT: " + scanContent);
        } else {
            Toast.makeText(getActivity(),
                    "No scan data received!", Toast.LENGTH_SHORT).show();
        }
    }

запускается zxing; затем читает; затем заканчивается; но без данных сканирования: я думаю, что «onActivityResult» никогда не запускается :(

Как я могу использовать zxing в этом фрагменте?


  • Вы также переопределяете onActivityResult() в своей деятельности или только во фрагменте? Если это так, вам следует вызвать super.onActivityResult, который передаст результат любым фрагментам. 29.12.2014
  • @атаулм; Я просто использую 'onActivityResult()' в своем фрагменте; не переопределять в моей деятельности. 29.12.2014
  • сделайте всплывающий текст к первой части оператора if, чтобы увидеть, попадет ли он туда, и сообщите нам 29.12.2014
  • @атаулм; Теперь я переопределяю это в Activity с помощью «super.onActivityResult (arg0, arg1, arg2);» но не работал. 29.12.2014
  • @PanayiotisIracleous; Я сделал это, но он никогда не попадает в 'onActivityResult' 29.12.2014
  • вы добавили пакет в манифест? 29.12.2014
  • @PanayiotisIracleous; Да, у меня есть «активность android:name=com.example.tabfragment.Tab1/›» в манифесте. 29.12.2014
  • @Kuvalya Вы не можете добавить фрагмент в манифест. не могли бы вы добавить проект где-нибудь в Интернете, чтобы я мог скачать его и проверить? И вы хотите запустить приложение штрих-кода или интегрировать активность в свое приложение? 29.12.2014
  • @PanayiotisIracleous; извините, я не могу загрузить весь проект. но прежде чем вы спросили, у меня не было пакета в манифесте. Затем я пробую «com.example.tabfragment», а затем com.example.tabfragment.Tab1, но оба они не работают. 29.12.2014
  • подождите, Tab1 это активность или фрагмент? цвет меня смутил. 29.12.2014

Ответы:


1

IntentIntegrator имеет другой конструктор, принимающий Fragment. Вместо:

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

ты можешь использовать:

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

и он должен вызывать onActivityResult для фрагмента напрямую.

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


Если вы используете фрагменты библиотеки поддержки v4, IntentIntegratorSupportV4 обеспечивает совместимость:

IntentIntegrator scanIntegrator = new IntentIntegratorSupportV4(Tab1.this);
29.12.2014
  • Да .. Теперь это работает :) Я использую библиотеку поддержки; поэтому я использовал конструктор IntentIntegratorSupportV4. СПАСИБО. 31.12.2014
  • Какую версию вы используете? Я использую IntentIntegrator версии 3.2.1, и конструктор IntentIntegratorSupportV4 отсутствует. 30.01.2016

  • 2

    добавьте это в свой манифест

        <!-- Zxing scan activity -->
        <activity
            android:name="com.google.zxing.client.android.CaptureActivity"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" >
        </activity>
    

    а затем измените метод onclick на этот

        Intent intent = new Intent(context, CaptureActivity.class);
        intent.setAction("com.google.zxing.client.android.SCAN");
        // this stops saving ur barcode in barcode scanner app's
        // history
        intent.putExtra("SAVE_HISTORY", false);
        startActivityForResult(intent, 0); 
    

    и, наконец, измените результат на этот

    if(requestCode==0)
        if(resultCode==Activity.RESULT_OK){
             Toast.makeText(getActivity(),"Scan Result = " + data.getStringExtra("SCAN_RESULT"),
                 Toast.LENGTH_SHORT).show();
        }
    
    28.12.2014
  • У меня нет CaptureActivity в моем проекте. Я просто использую «IntentIntegrator» и «IntentResult» пакета «com.google.zxing.integration.android». 29.12.2014
  • CaptureActivity находится в проекте библиотеки zxing. 29.12.2014
  • @ataulm, потому что я хотел добавить активность сканирования zxing в свое приложение, а не просто открывать приложение сканера штрих-кода 29.12.2014

  • 3

    Для более новой библиотеки Zxing BarcodeScanner. IntentIntegratorSupportV4(Fragment.this) недоступен. Вы можете использовать это.

    IntentIntegrator integrator = IntentIntegrator.forSupportFragment(Fragment.this);
     integrator.initiateScan();
    
    07.01.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..