2016-05-09 4 views
0

アクティビティクラス以外でZXingインテントを開始して処理したいとします。しかし、私はこのクラスの結果をキャッチする方法を知らない。非アクティビティクラスのハンドルを作成する

このコードは、Xamarinに入力されたが、それは重要ではありません。

ScannerZXing.cs:

Intent intenScanner; 

public ScannerZXing() 
{ 
    intentScanner = ScanIntent.GetZXingScanIntent(); 
} 

public override void Scan(Activity current) 
{ 
    //this.StartActivityForResult(this.intentScanner, 0); // error: Java.Lang.NullPointerExceptionn 

    //current.StartActivityForResult(this.intentScanner, 0); // OK, but I have to handle result in MainActivity (I don't want it.) 
} 

protected override void OnActivityResult(int requestCode, [Android.Runtime.GeneratedEnumAttribute()] Android.App.Result resultCode, Android.Content.Intent intent) 
{ 
    base.OnActivityResult(requestCode, resultCode, intent); 
    //.... 
} 

MainClass.cs:

protected override void OnCreate(Bundle bundle) 
{ 

    //....   

    var scanner = new ScannerZXing(); 

    Button btnScan = this.FindViewById<Button>(Resource.Id.btnScan); 
    btnScan.Click += delegate 
    { 
      scanner.Scan(this); 
    } 
    //.... 
} 

私はMainActivityでOnActivityResultをすれば、それは動作します。しかし、私はスキャンロジックを分離クラスに移したいと思っています。

答えて

0

あなただけzxingためnugetを得ることができます。

https://www.nuget.org/packages/ZXing.Net.Mobile

private async Task<string> Scan() 
    { 
     var scanner = new ZXing.Mobile.MobileBarcodeScanner() { BottomText = "Place red line on QR image to scan", TopText = "Place red line on QR image to scan", CancelButtonText = "Cancel scan", CameraUnsupportedMessage = "Camera not availabe on device" }; 
     var scanResults = await scanner.Scan(); 
     return scanresults; 
    } 
+0

こんにちは、ありがとう。私はこの方法について知っていますが、私はインテントアプローチを好むでしょう。 – TENK

+0

あなたはOnActivityResultが必要ですか?ナゲットでさえ、おそらくあなたのコードから抽象的なアクティビティを使用するでしょう。 –

関連する問題