Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从结果中读取二维码并自动直接进入浏览器_Android_Xamarin.android_Qr Code_Zxing - Fatal编程技术网

Android 从结果中读取二维码并自动直接进入浏览器

Android 从结果中读取二维码并自动直接进入浏览器,android,xamarin.android,qr-code,zxing,Android,Xamarin.android,Qr Code,Zxing,我最近刚刚开始编程和开发应用程序。如果有人能帮助我,我将不胜感激。我用ZXing做了QR扫描器,能够显示结果,但如果从QR码中检测到URL,我希望它能自动打开浏览器 以下是我的扫描仪活动代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.Support.V7.App; using Android.Views; using Android.Ap

我最近刚刚开始编程和开发应用程序。如果有人能帮助我,我将不胜感激。我用ZXing做了QR扫描器,能够显示结果,但如果从QR码中检测到URL,我希望它能自动打开浏览器

以下是我的扫描仪活动代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.Support.V7.App;
using Android.Views;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Widget;
using Android.Gms.Vision.Barcodes;
using Android.Gms.Vision;
using Android.Graphics;
using Android.Content.PM;
using Android.Support.V4.App;
using Android;
using static Android.Gms.Vision.Detector;
using Android.Util;

namespace com.xamarin.sample.splashscreen
{
    [Activity(Label = "Scanner")]
    public class Scanner : AppCompatActivity,ISurfaceHolderCallback, IProcessor
    {
        SurfaceView cameraPreview;
        TextView txtResult;
        BarcodeDetector barcodeDetector;
        CameraSource cameraSource;
        const int RequestCameraPermissionID = 1001;

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
        {
           switch(requestCode)
            {
                case RequestCameraPermissionID:
                    {
                        if (grantResults[0]==Permission.Granted)
                        {
                            if (ActivityCompat.CheckSelfPermission(ApplicationContext, Manifest.Permission.Camera) != Android.Content.PM.Permission.Granted)
                            {
                                ActivityCompat.RequestPermissions(this, new string[]
                                {
                     Manifest.Permission.Camera
                                 }, RequestCameraPermissionID);
                                return;
                            }
                            try
                            {
                                cameraSource.Start(cameraPreview.Holder);
                            }
                            catch (InvalidOperationException)
                            {

                            }
                        }
                    }
                    break;
            }
        }

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Scanner);

            cameraPreview = FindViewById<SurfaceView>(Resource.Id.cameraPreview);
            txtResult = FindViewById<TextView>(Resource.Id.txtResult);

            barcodeDetector = new BarcodeDetector.Builder(this)
                .SetBarcodeFormats(BarcodeFormat.QrCode).Build();

            cameraSource = new CameraSource.Builder(this, barcodeDetector)
                .SetRequestedPreviewSize(640, 480).Build();

            cameraPreview.Holder.AddCallback(this);
            barcodeDetector.SetProcessor(this);
        }

        public void SurfaceChanged(ISurfaceHolder holder, [GeneratedEnum] Format format, int width, int height)
        {

        }

        public void SurfaceCreated(ISurfaceHolder holder)
        {
          if (ActivityCompat.CheckSelfPermission(ApplicationContext, Manifest.Permission.Camera) != Android.Content.PM.Permission.Granted)
                {
                ActivityCompat.RequestPermissions(this, new string[]
                {
                     Manifest.Permission.Camera
                 }, RequestCameraPermissionID);
                return;
            }
            try
            {
                cameraSource.Start(cameraPreview.Holder);
            }
            catch (InvalidOperationException)
            {

            }
        }

        public void SurfaceDestroyed(ISurfaceHolder holder)
        {
            cameraSource.Stop();
        }

        public void ReceiveDetections(Detections detections)
        {
            SparseArray qrcodes = detections.DetectedItems;
            if(qrcodes.Size()!=0)
            {
                txtResult.Post(() =>
                {
                    Vibrator vib = (Vibrator)GetSystemService(Context.VibratorService);
                    vib.Vibrate(1000);
                    txtResult.Text = ((Barcode)qrcodes.ValueAt(0)).RawValue;
                });
            }
        }

        public void Release()
        {

        }
    }`enter code here`
}`enter code here`
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Android.Support.V7.App;
使用Android.Views;
使用Android.App;
使用Android.Content;
使用Android.OS;
使用Android.Runtime;
使用Android.Widget;
使用Android.Gms.Vision.barcode;
使用Android.Gms.Vision;
使用Android.Graphics;
使用Android.Content.PM;
使用Android.Support.V4.App;
使用安卓系统;
使用静态Android.Gms.Vision.Detector;
使用Android.Util;
命名空间com.xamarin.sample.splashscreen
{
[活动(Label=“Scanner”)]
公共类扫描程序:AppCompativeActivity、ISurfaceHolderCallback、IProcessor
{
表面审查;
TextView txtResult;
条码检测器条码检测器;
摄像源摄像源;
const int RequestCameraPermissionID=1001;
public override void OnRequestPermissionsResult(int-requestCode,字符串[]权限,[GeneratedEnum]权限[]grantResults)
{
开关(请求代码)
{
案例请求CameraPermissionID:
{
if(grantResults[0]==权限.已授予)
{
if(ActivityCompat.CheckSelfPermission(ApplicationContext,Manifest.Permission.Camera)!=Android.Content.PM.Permission.grated)
{
ActivityCompat.RequestPermissions(此,新字符串[])
{
舱单、许可、照相机
},RequestCameraPermissionID);
返回;
}
尝试
{
cameraSource.Start(cameraPreview.Holder);
}
捕获(无效操作异常)
{
}
}
}
打破
}
}
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Scanner);
cameraPreview=findviewbyd(Resource.Id.cameraPreview);
txtResult=FindViewById(Resource.Id.txtResult);
barcodeDetector=新的barcodeDetector.Builder(此)
.SetBarcodeFormats(BarcodeFormat.QrCode).Build();
cameraSource=新建cameraSource.Builder(这是barcodeDetector)
.SetRequestedPreviewSize(640480).Build();
cameraPreview.Holder.AddCallback(本);
条形码检测器。设置处理器(本);
}
public void surfacechange(ISurfaceHolder持有人,[GeneratedEnum]格式,整数宽度,整数高度)
{
}
已处理的公共空隙表面(ISurfaceHolder)
{
if(ActivityCompat.CheckSelfPermission(ApplicationContext,Manifest.Permission.Camera)!=Android.Content.PM.Permission.grated)
{
ActivityCompat.RequestPermissions(此,新字符串[])
{
舱单、许可、照相机
},RequestCameraPermissionID);
返回;
}
尝试
{
cameraSource.Start(cameraPreview.Holder);
}
捕获(无效操作异常)
{
}
}
公共空隙表面置换(ISurfaceHolder)
{
cameraSource.Stop();
}
公共无效接收检测(检测)
{
SparseArray qrcodes=检测。检测项目;
如果(qrcodes.Size()!=0)
{
txtResult.Post(()=>
{
可控震源vib=(可控震源)GetSystemService(Context.可控震源服务);
振动(1000);
txtResult.Text=((条形码)qrcodes.ValueAt(0)).RawValue;
});
}
}
公开无效释放()
{
}
}`在这里输入代码`
}`在这里输入代码`
如果从二维码中检测到URL,我希望它自动打开浏览器

当您从二维码中获得
ZXing.Result
时,您可以使用方法确认这是否是
URL

当您使用
Patterns.WebUrl.Matcher(result.Text).Matcher()方法时,此正则表达式模式将匹配RFC 3987国际化URL(也称IRIs)的大部分

代码如下:

private void HandleScanResult(ZXing.Result result)
    {
        string msg = "";

        if (result != null && !string.IsNullOrEmpty(result.Text))
            msg = "Found Barcode: " + result.Text;
        else
            msg = "Scanning Canceled!";

        Intent resultIntent = new Intent();
        Bundle bundle = new Bundle();
        bundle.PutString("result", result.Text);
        resultIntent.PutExtras(bundle);
        this.SetResult(Result.Ok, resultIntent);

        if (Patterns.WebUrl.Matcher(result.Text).Matches())
        {
            //If this result get from the QR code is an URL, open the browse.                    
            Intent intent = new Intent();
            intent.SetAction("android.intent.action.VIEW");
            Android.Net.Uri content_url = Android.Net.Uri.Parse(result.Text);
            intent.SetData(content_url);
            StartActivity(intent);
        }
        else
        {
            this.RunOnUiThread(() => Toast.MakeText(this, msg, ToastLength.Short).Show());
        }
    }
如果从二维码中检测到URL,我希望它自动打开浏览器

当您从二维码中获得
ZXing.Result
时,您可以使用方法确认这是否是
URL

当您使用
Patterns.WebUrl.Matcher(result.Text).Matcher()方法时,此正则表达式模式将匹配RFC 3987国际化URL(也称IRIs)的大部分

代码如下:

private void HandleScanResult(ZXing.Result result)
    {
        string msg = "";

        if (result != null && !string.IsNullOrEmpty(result.Text))
            msg = "Found Barcode: " + result.Text;
        else
            msg = "Scanning Canceled!";

        Intent resultIntent = new Intent();
        Bundle bundle = new Bundle();
        bundle.PutString("result", result.Text);
        resultIntent.PutExtras(bundle);
        this.SetResult(Result.Ok, resultIntent);

        if (Patterns.WebUrl.Matcher(result.Text).Matches())
        {
            //If this result get from the QR code is an URL, open the browse.                    
            Intent intent = new Intent();
            intent.SetAction("android.intent.action.VIEW");
            Android.Net.Uri content_url = Android.Net.Uri.Parse(result.Text);
            intent.SetData(content_url);
            StartActivity(intent);
        }
        else
        {
            this.RunOnUiThread(() => Toast.MakeText(this, msg, ToastLength.Short).Show());
        }
    }

非常感谢!真的很感激:)这对我来说还不起作用,我还在努力想办法out@GideonLer,你有什么问题?比如我怎么实现代码?我刚把方法放在Scanner.activity中?抱歉,如果我听起来很笨,我只是刚开始编程;x@GideonLer,将方法放入扫描仪。活动很好,就是一个例子。非常感谢!真的很感激:)这对我来说还不起作用,我还在努力想办法out@GideonLer,你有什么问题?比如我怎么实现代码?我刚把方法放在Scanner.activity中?索尔