Передача результата сканирования другому намерению - PullRequest
0 голосов
/ 02 мая 2019

Я получил результат сканирования из фрагмента сканирования, но как я могу отправить результат другому намерению?

В моем фрагменте сканирования

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            Intent intent1 = new Intent(getActivity(), Trial.class);
            intent1.putExtra("Barcodes", "hi");
            startActivity(intent1);
        }
    }

1 Ответ

0 голосов
/ 07 мая 2019

Проблема: IntentResult является конечным классом и не реализует интерфейс Parcelable , поэтому вы не можете отправить его в другое действие с помощью Intent.putExtra().

Решение: Создайте свой собственный класс ScanResult, который является клонированной версией IntentResult.

ScanResult.java

public class ScanResult implements Parcelable {

    public String contents;
    public String formatName;
    public byte[] rawBytes;
    public Integer orientation;
    public String errorCorrectionLevel;

    public ScanResult(IntentResult intentResult) {
        contents = intentResult.getContents();
        formatName = intentResult.getFormatName();
        rawBytes = intentResult.getRawBytes();
        orientation = intentResult.getOrientation();
        errorCorrectionLevel = intentResult.getErrorCorrectionLevel();
    }

    protected ScanResult(Parcel in) {
        contents = in.readString();
        formatName = in.readString();
        rawBytes = in.createByteArray();
        long orientationInLong = in.readLong();
        orientation = orientationInLong != Long.MAX_VALUE ? (int) orientationInLong : null;
        errorCorrectionLevel = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(contents);
        dest.writeString(formatName);
        dest.writeByteArray(rawBytes);
        dest.writeLong(orientation != null ? orientation : Long.MAX_VALUE);
        dest.writeString(errorCorrectionLevel);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<ScanResult> CREATOR = new Creator<ScanResult>() {
        @Override
        public ScanResult createFromParcel(Parcel in) {
            return new ScanResult(in);
        }

        @Override
        public ScanResult[] newArray(int size) {
            return new ScanResult[size];
        }
    };
}

Использование его в вашем фрагменте.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        ScanResult scanResult = new ScanResult(result);
        Intent intent1 = new Intent(getActivity(), Trial.class);
        intent1.putExtra("scanResult", scanResult);
        startActivity(intent1);
    }
}

В полученной активности (Trial.java)

ScanResult scanResult = getIntent().getParcelableExtra<ScanResult>("scanResult");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...