Android 是否有一种与包无关的方式来制作二维码相关的意图?

Android 是否有一种与包无关的方式来制作二维码相关的意图?,android,android-intent,qr-code,Android,Android Intent,Qr Code,我正在安卓应用程序中实现一项功能,它扫描二维码,并对返回的数据进行处理 我当前的解决方案是从zxing包请求扫描活动 Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.setPackage("com.google.zxing.client.android"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(

我正在安卓应用程序中实现一项功能,它扫描二维码,并对返回的数据进行处理

我当前的解决方案是从zxing包请求扫描活动

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, REQUEST_QR_SCAN);
但是,当用户的手机上没有应用程序时,这将无法工作并导致错误。我想避免检查用户是否安装了这个特定的应用程序,因为他们可能选择了不同的QR扫描仪

我似乎找不到一种方法来让用户说出我想扫描二维码,然后让用户选择合适的应用程序。e、 g.就像他们从gallery应用程序中选择图像一样


有什么解决方案吗?

此示例使用库-


您可以在项目中使用ZXing库,通过gradle添加它,不幸的是,只有第三个pt的端口可用,或者将自己的库包装在应用程序中,并将活动声明到AndroidManifest.XML中

那么你的目的就是为了你自己的应用


此外,您还可以在ZXing应用程序上打开google play,以便用户安装它。

这非常有效,但我不知道它可以作为一个库使用。谢谢:-
 public class PayQR extends Fragment implements QRCodeReaderView.OnQRCodeReadListener {

    public static QRCodeReaderView mydecoderview;
    public static String QRData;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_pay_qr, container, false);
        getActivity().setTitle(R.string.Pay_QR);
        try {
            mydecoderview = (QRCodeReaderView) view.findViewById(R.id.qrdecoderview);
            mydecoderview.setOnQRCodeReadListener(this);

            // Use this function to enable/disable decoding
            mydecoderview.setQRDecodingEnabled(true);

            // Use this function to change the autofocus interval (default is 5 secs)
            mydecoderview.setAutofocusInterval(2000L);

            // Use this function to enable/disable Torch
            mydecoderview.setTorchEnabled(true);

            // Use this function to set front camera preview
            mydecoderview.setFrontCamera();

            // Use this function to set back camera preview
            mydecoderview.setBackCamera();
        }catch (RuntimeException ex){

        }
        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
        mydecoderview.startCamera();
    }

    @Override
    public void onQRCodeRead(String text, PointF[] points) {
        try{
        QRData = text.replaceAll("\u00A0"," ");
        Fabric.with(getActivity(), new Crashlytics());
        mydecoderview.stopCamera();
        getActivity().setTitle(R.string.Order_payment);
        }
        catch (RuntimeException ex){

        }
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}