3

好的,可以说有 3 个不同的应用程序在手机上使用 zxing lib。每当我想用自己的应用程序打开 zxing 时,android 都会询问我是使用应用程序 1 还是应用程序 2 还是我自己的应用程序来完成操作。如何强制它仅通过我的应用程序运行而没有任何对话框?有机会做吗?

编辑

在 CommonsWare 的补充中,如果您想处理其他活动的条形码结果,您可以这样做。

第 1 步:跳转到 Capture Activity 中名为 handleDecode 的方法。在 handleDecodeInternally(rawResult, resultHandler, barcode); 之后添加这些行

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

第 2 步:对其他活动的 onActivityResult 事件做任何想做的事情。

PS:再次感谢 CommonsWare。

4

4 回答 4

7

首先,没有“zxing lib”。您应该使用 Barcode Scanner 应用程序,在活动级别将其绑定到您的应用程序中,最好使用他们的IntentIntegrator代码。这是一个示例应用程序来演示这一点。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>,将 Barcode Scanner 源代码的副本修改为不需要它,然后使用基于组件的Intent构造函数(例如new Intent(this, ThisIsYourRevisedScanningActivity.class))启动扫描活动。

于 2012-07-19T11:27:09.850 回答
4

只要包括这个,这已经完成了我所需要的..

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage(getPackageName());
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(intent, 0);
于 2014-01-29T08:28:03.347 回答
0

Android 不允许您自行设置。只有用户可以为操作设置默认应用程序。如果在您的手机上,您希望您的应用程序处理该事件,则在选择器中选择您的应用程序之前选中用作默认框。

出于安全原因,Android 不允许您在没有用户交互的情况下将您的应用程序设置为默认值,因为这样恶意应用程序可能会将自身作为默认值绑定到各种事件。

于 2012-07-19T11:21:54.597 回答
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>

而不是通过外部意图调用你应该调用 zxing 像:

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);
}

然后onActivityResult()使用请求代码处理结果ACTION_ZXING_SCANNER。如果需要,导入字符串:

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

注意:这对我有用,我将 zxing 项目作为库添加到我的项目中,所以这里是 - “zxing lib”:)

于 2014-06-24T14:03:01.290 回答