Android 从结果中读取二维码并自动直接进入浏览器
我最近刚刚开始编程和开发应用程序。如果有人能帮助我,我将不胜感激。我用ZXing做了QR扫描器,能够显示结果,但如果从QR码中检测到URL,我希望它能自动打开浏览器 以下是我的扫描仪活动代码: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
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中?索尔