2012-07-19 57 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” :)

相关问题