2012-07-04 39 views
3

我使用這個程序來掃描條形碼斑馬線:MonoTouch的斑馬線相機不會打開

https://github.com/jmawebtech/BarcodeReader-MonoTouch

如果我進入應用程序,掃描條形碼,按home鍵,重新輸入程序,然後點擊掃描,我看到一個黑色的屏幕,看起來像一個相機的快門從來沒有打開。我附上了這張票的圖片。

如果我按取消,並返回到掃描我看到攝像頭再次打開。

爲什麼相機從來沒有在一些場合打開?

Camera Image Stays closed

回答

1

我不得不添加此代碼的Info.plist:

UIApplicationExitsOnSuspend是

APP的代表,我不得不添加以下代碼:

public override void OnResignActivation (UIApplication application) 
    { 
     UIApplication.SharedApplication.PerformSelector(new Selector("terminateWithSuccess"), null, 0f); 
    } 

視頻記錄儀,它是在該軟件中使用,不能在後臺線程運行。

+0

可以解決這個問題,從而避免當發送到後臺您的應用程序終止。請參閱我的回答 –

0

你不必去改變你的應用程序不能在後臺運行的極端。

我通過創建時間每一件我發起了cameraviewcontroller打開相機,我會指向這個屬性的AppDelegate的一個視圖控制器屬性修復了這個問題。我稱之爲cvc。

我通過參考它通過訪問的屬性:

的AppDelegate廣告=(AppDelegate中)UIApplication.SharedApplication.Delegate;

然後在AppDelegate中我有這樣的代碼:

public override void OnResignActivation (UIApplication application) 
    { 
     cvc.PerformSelector(new Selector("terminateWithSuccess"), null, 0f); 
    } 

感謝儘管

+0

您能否詳細說明您所做的事情?謝謝。 – servarevitas3

1

我通過創建保持一個參照之前我自己的掃描方法解決了這個在kickstart顯示ViewController和處置它在顯示一個新的之前。

public static class BarcodeScanner 
{ 
    private static ZxingCameraViewController currentBarcodeScanner; 

    public static Task<Result> Scan(UIViewController hostController, MobileBarcodeScanner scanner, MobileBarcodeScanningOptions options) 
    { 
     return Task.Factory.StartNew(delegate 
     { 
      Result result = null; 

      var scanResultResetEvent = new ManualResetEvent(false); 

      hostController.InvokeOnMainThread(delegate 
      { 
       // Release previously displayed barcode scanner 
       if (currentBarcodeScanner != null) 
       { 
        currentBarcodeScanner.Dispose(); 
        currentBarcodeScanner = null; 
       } 

       currentBarcodeScanner = new ZxingCameraViewController(options, scanner); 

       // Handle barcode scan event 
       currentBarcodeScanner.BarCodeEvent += delegate(BarCodeEventArgs e) 
       { 
        currentBarcodeScanner.DismissViewController(); 
        result = e.BarcodeResult; 
        scanResultResetEvent.Set(); 
       }; 

       // Handle barcode scan cancel event 
       currentBarcodeScanner.Canceled += delegate 
       { 
        currentBarcodeScanner.DismissViewController(); 
        scanResultResetEvent.Set(); 
       }; 

       // Display the camera view controller 
       hostController.PresentViewController(currentBarcodeScanner, true, delegate{}); 
      }); 

      // Wait for scan to complete 
      scanResultResetEvent.WaitOne(); 

      return result; 
     }); 
    } 
} 

你再使用它像這樣

BarcodeScanner.Scan(this) 
    .ContinueWith(t => InvokeOnMainThread(() => 
    { 
     if (t.Result == null) 
     { 
      new UIAlertView("Scan Cancelled", "The barcode scan was cancelled", null, null, "OK").Show(); 
     } 
     else 
     { 
      new UIAlertView("Scan Complete", "Result from barcode scan was " + t.Result, null, null, "OK").Show(); 
     } 
    }))