2012-07-19 60 views
3

好吧,讓我們說有3個不同的應用程序在手機上使用zxing lib。每當我想用自己的應用程序打開zxing時,android會詢問是否使用應用程序1或應用程序2或我自己的應用程序完成操作。我如何強制它只能通過我的應用程序運行而沒有任何對話?有沒有機會做到這一點?如何強制使用zxing lib只有我的應用程序?

編輯

在附加CommonsWare,你可以做,如果你要處理的 其他活動條形碼結果。

第1步:跳轉到捕獲活動中稱爲handleDecode的方法。在handleDecodeInternal(rawResult,resultHandler,barcode)之後添加這些行;

Intent intent = new Intent(getIntent().getAction()); 
intent.putExtra("SCAN_RESULT", rawResult.getText()); 
setResult(RESULT_OK,intent); 
finish(); 

第2步:做其他活動的onActivityResult事件。 PS:再次感謝CommonsWare公司。

回答

7

首先,沒有「zxing lib」。您應該使用條碼掃描器應用程序,將其綁定到應用程序的活動級別,最好使用其代碼IntentIntegratorHere is a sample application demonstrating this。 ZXing的創建者特別不支持或認可將Barcode Scanner源代碼烘焙到另一個應用程序中。

但是,考慮到您的症狀,我必須假設您正在嘗試將Barcode Scanner源代碼添加到您自己的應用程序中。

您可能有這樣的事情在你的清單中的掃描活動的元素:

 <intent-filter > 
      <action android:name="com.google.zxing.client.android.SCAN" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

你是不是條碼掃描器。然而,這<intent-filter>聲稱你是條碼掃描儀。

您需要刪除此<intent-filter>,修改條形碼掃描器源代碼的副本不要求它,然後使用基於組件的Intent構造啓動掃描活動(例如,new Intent(this, ThisIsYourRevisedScanningActivity.class))。

+0

做,謝謝! – 2012-07-19 11:34:55

+0

最後一個問題:如何將qrcode發送回其他活動的onActivityResult事件?我的意思是,現在我可以掃描它並處理結果沒有問題,但是我需要在掃描過程結束後將結果發送到另一個活動onActivityResult。 – 2012-07-19 12:34:46

+0

@MustafaGüven:由於我沒有試圖將條形碼掃描儀的源代碼集成到應用程序中,所以我沒有建議 - 對不起。 – CommonsWare 2012-07-19 12:35:33

0

Android不允許您自行設置。只有用戶可以設置操作的默認應用程序。如果在手機上,您希望自己的應用處理該事件,那麼請在選擇器中選擇您的應用之前選中使用默認框。

出於安全原因,Android不允許您在沒有用戶交互的情況下將您的應用設置爲默認應用,因爲惡意應用可能會將其本身作爲各種事件的默認應用。

4

只是包括這一點,這已經做到了我所需要的..

Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
      intent.setPackage(getPackageName()); 
      intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
      startActivityForResult(intent, 0); 
+0

這更像是一個臨時解決方法,它確實有效。然而,在這種情況下,您的應用程序將被AOS視爲BarCodeScanner應用程序,在大多數情況下不適用。如果你刪除意圖過濾器,以避免檢測您的應用程序作爲BarCodeScanner應用程序這種解決方案將無法正常工作。 – Stan 2014-06-24 14:06:21

0

其實你需要刪除的意圖過濾器一樣CommonsWare說,因此它必須如下:

<activity 
     android:name="com.google.zxing.client.android.CaptureActivity" 
     android:screenOrientation="landscape" 
     android:configChanges="orientation|keyboardHidden" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
     android:windowSoftInputMode="stateAlwaysHidden"> 
</activity> 

和,而不是通過外部的意圖喊你應該叫斑馬線一樣:

private final static int ACTION_ZXING_SCANNER = 0x0000c0de; //IntentIntegrator.REQUEST_CODE 
private void startZxingScanner() { 
    final Intent intent = new Intent(this, com.google.zxing.client.android.CaptureActivity.class); 
    intent.setAction(Intents.Scan.ACTION); 
    startActivityForResult(intent, ACTION_ZXING_SCANNER); 
} 

然後使用請求代碼ACTION_ZXING_SCANNER處理結果onActivityResult()。如果需要,進口字符串:

import com.google.zxing.client.android.Intents; 

注意:這對我的作品和我說斑馬線項目作爲一個lib到我的項目,所以這裏是 - 「斑馬線LIB」 :)

相關問題