Проблема приложения сканера кода QR с чтением кода Vcard и Geo qr - PullRequest
0 голосов
/ 21 апреля 2020

Мое приложение сканера QR-кода отлично работает только с urls и texts. Я хочу, чтобы он открывал карты Google при сканировании Geo qr code и открывал новое действие со всей информацией о vCard qr code. Я пытался импортировать Intents с сайта разработчиков Goolgle, но ничего не получалось. Должен ли я изменить метод processRawResult? Вот мое приложение:

import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;


import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.androidcoding.qrcode.Model.QRGeoModel;

import com.androidcoding.qrcode.Model.QRVcardModel;
import com.google.android.material.navigation.NavigationView;
import com.google.zxing.Result;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;


import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {

    private ZXingScannerView zXingScannerView;
    private TextView textView;

    private DrawerLayout dl;
    private ActionBarDrawerToggle t;
    private NavigationView nv;

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




        zXingScannerView = (ZXingScannerView)findViewById(R.id.zxscan);
        textView = (TextView)findViewById(R.id.text_result);

        Dexter.withActivity(this)
                .withPermission(android.Manifest.permission.CAMERA)
                .withListener(new PermissionListener() {
                    @Override
                    public void onPermissionGranted(PermissionGrantedResponse response) {
                        zXingScannerView.setResultHandler(MainActivity.this);
                        zXingScannerView.startCamera();
                    }

                    @Override
                    public void onPermissionDenied(PermissionDeniedResponse response) {
                        Toast.makeText(MainActivity.this, "You must accept this permission", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {

                    }
                })
                .check();
    }



    @Override
    protected void onDestroy() {
        zXingScannerView.stopCamera();
        super.onDestroy();
    }

    @Override
    public void handleResult(Result rawResult) {
        processRawResult(rawResult.getText());
    }

    private void processRawResult(String text){
        if (text.startsWith("BEGIN:")) {
            String[] tokens = text.split("\n");
            QRVcardModel qrVcardModel = new QRVcardModel();
            for (int i = 0; i < tokens.length; i++) {
                if (tokens[i].startsWith("BEGIN:")) {
                    qrVcardModel.setType(tokens[i].substring("BEGIN:".length()));
                } else if (tokens[i].startsWith("N:")) {
                    qrVcardModel.setName(tokens[i].substring("N:".length()));
                } else if (tokens[i].startsWith("ORG:")) {
                    qrVcardModel.setOrg(tokens[i].substring("ORG:".length()));
                } else if (tokens[i].startsWith("TEL:")) {
                    qrVcardModel.setTel(tokens[i].substring("TEL:".length()));
                } else if (tokens[i].startsWith("URl:")) {
                    qrVcardModel.setUrl(tokens[i].substring("URL:".length()));
                } else if (tokens[i].startsWith("EMAIL:")) {
                    qrVcardModel.setEmail(tokens[i].substring("EMAIL:".length()));
                } else if (tokens[i].startsWith("ADR:")) {
                    qrVcardModel.setAddress(tokens[i].substring("ADR:".length()));
                } else if (tokens[i].startsWith("NOTE:")) {
                    qrVcardModel.setNote(tokens[i].substring("NOTE:".length()));
                } else if (tokens[i].startsWith("SUMMARY:")) {
                    qrVcardModel.setSummary(tokens[i].substring("SUMMARY:".length()));
                } else if (tokens[i].startsWith("DTSTART:")) {
                    qrVcardModel.setDtstart(tokens[i].substring("DTSTART:".length()));
                } else if (tokens[i].startsWith("DTEND:")) {
                    qrVcardModel.setDtend(tokens[i].substring("DTEND:".length()));
                }

                Intent intentVcard = new Intent(MainActivity.this, VcardActivity.class);
                intentVcard.putExtra("value_name" , qrVcardModel.getName());
                intentVcard.putExtra("value_type", qrVcardModel.getType());
                intentVcard.putExtra("value_org", qrVcardModel.getOrg());
                intentVcard.putExtra("value_tel", qrVcardModel.getTel());
                intentVcard.putExtra("value_url", qrVcardModel.getUrl());
                intentVcard.putExtra("value_email", qrVcardModel.getEmail());
                intentVcard.putExtra("value_address", qrVcardModel.getAddress());
                intentVcard.putExtra("value_note", qrVcardModel.getNote());
                intentVcard.putExtra("value_summary", qrVcardModel.getSummary());
                intentVcard.putExtra("value_dtstart", qrVcardModel.getDtstart());
                intentVcard.putExtra("value_dtend", qrVcardModel.getDtend());
                startActivity(intentVcard);

            }

        } else if (text.startsWith("http://") ||
        text.startsWith("https://") ||
        text.startsWith("www.")){


            Intent intentUrl = new Intent(MainActivity.this, WebSites.class);
            intentUrl.putExtra("URL", text);
            startActivity(intentUrl); //Sends url to WebSites Activity.

        }
        else if (text.startsWith("geo:"))
        {
            QRGeoModel qrGeoModel = new QRGeoModel();
            String delims = "[ , ?q= ]+";
            String tokens[] = text.split(delims);

            for (int i=0;i<tokens.length;i++)
            {
                if (tokens[i].startsWith(" geo:"))
                {
                    qrGeoModel.setLat(tokens[i].substring("geo:".length()));
                }
            }
            qrGeoModel.setLat(tokens[0].substring("geo:".length()));
            qrGeoModel.setLng(tokens[1]);
            qrGeoModel.setGeo_place(tokens[2]);

            Uri gmmIntentUri = Uri.parse(qrGeoModel.getLat() + "," + qrGeoModel.getLng());

        }

        else
        {
            Intent intentTxt = new Intent(MainActivity.this, TextActivity.class);
            intentTxt.putExtra("TEXT", text);
            startActivity(intentTxt); //Sends txt to TextActivity
        }
        zXingScannerView.resumeCameraPreview(MainActivity.this);
    }

}

Когда я сканирую код vCard или Geo qr, приложение вылетает. Мой код неверен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...