java - Android Studio 条码扫描器应用程序。通过 Intent 扫描

标签 java android android-intent barcode-scanner onactivityresult

我有一个 Android 应用程序,它的布局非常简单。一个按钮 (scan_barcode1) 后跟一个编辑文本 (scan_content),另一个按钮 (scan_barcode2) 后跟另一个编辑文本 (scan_content2)。

     <Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/scanner"
    android:id="@+id/scan_barcode1"
    android:layout_below="@+id/spinner7"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="25dp"
    android:onClick="openScanner1" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:ems="10"
    android:id="@+id/scan_content"
    android:layout_below="@+id/scan_barcode1"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:hint="@string/serial_number"
    android:layout_alignRight="@+id/spinner7"
    android:layout_alignEnd="@+id/spinner7" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/scanner"
    android:id="@+id/scan_barcode2"
    android:layout_below="@+id/scan_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:onClick="openScanner2" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:ems="10"
    android:id="@+id/scan_content2"
    android:layout_below="@+id/scan_barcode2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:hint="@string/serial_number"
    android:layout_alignRight="@+id/scan_content"
    android:layout_alignEnd="@+id/scan_content" />

我希望我的应用程序执行以下操作:按下按钮后,扫描功能将打开,扫描条形码并将序列号放入其下方的编辑文本中。例如,如果您按 scan_barcode1,序列号将放置在 scan_content 中,如果按 scan_barcode2,序列号将出现在 scan_content2 中。

我的应用程序的用途:按下按钮后,扫描功能将打开,扫描条形码放置在 Activity 的两个编辑文本中。例如,如果我按 scan_barcode1,则序列号将放置在 scan_content 和 scan_content2 中。

以下是调用条形码扫描仪的 Intent 代码。我正在使用 zxing 库仅供引用。

    //This method opens the barcode scanner when scan_barcode1 button is pressed

    public void openScanner1 (View view) {
    IntentIntegrator scanIntegrator = new IntentIntegrator (this);
    scanIntegrator.initiateScan();
}



    //This method opens the bar code scanner when scan_barcode2 is pressed

    public void openScanner2 (View view) {
    IntentIntegrator scanIntegrator = new IntentIntegrator(this);
    scanIntegrator.initiateScan();
}

我将两个editText初始化为contentTxt和contentTxt2

     contentTxt = (EditText) findViewById(R.id.scan_content);
    contentTxt2 = (EditText) findViewById(R.id.scan_content2);

然后我开始 OnActivityResult 方法,该方法检索编辑文本并应该将其放置在正确的编辑文本中(事实并非如此)

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

    //Places barcode in the scan_content editext

    if (scanningResult != null) {
        String scanContent = scanningResult.getContents();
        contentTxt.setText(scanContent);
    }

    //places bar code in the scan_content2 edittext
    if (scanningResult !=null) {
        String scanContent = scanningResult.getContents();
        contentTxt2.setText(scanContent);
    }


    else{
        Toast toast = Toast.makeText(getApplicationContext(),
                "No scan data received!", Toast.LENGTH_SHORT);
        toast.show();
    }

}

相反,条形码只是在两个编辑文本中复制。我已经被这个问题困扰有一段时间了,我迫切需要一个解决方案。非常感谢任何帮助!

所以我已经更新了我的代码,但现在我根本没有检索条形码,而是得到了 null 作为结果,并且弹出了我的 toast 消息。有人知道发生了什么事吗?无论我按哪个按钮,都会发生这种情况。

     private int scanFieldPosition = 0;

public void openScanner1 (View view) {
    scanFieldPosition = 1;
    IntentIntegrator scanIntegrator = new IntentIntegrator (this);
    scanIntegrator.initiateScan();

}

public void openScanner2 (View view) {
    scanFieldPosition = 2;
    IntentIntegrator scanIntegrator = new IntentIntegrator(this);
    scanIntegrator.initiateScan();

}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    if (scanningResult != null && scanFieldPosition == 1) {
        String scanContent = scanningResult.getContents();
        contentTxt.setText(scanContent);
    }

    if (scanningResult !=null && scanFieldPosition == 2) {
        String scanContent = scanningResult.getContents();
        contentTxt2.setText(scanContent);
    }


    else{
        Toast toast = Toast.makeText(getApplicationContext(),
                "No scan data received!", Toast.LENGTH_SHORT);
        toast.show();
    }

}

问题是我没有静态变量。我仍然收到 toast 消息,但我的条形码被放置在正确的编辑文本中,这很奇怪。无论如何,感谢您的帮助,我的应用程序现在可以运行了!

    private static int scanFieldPosition = 0;

最佳答案

您可以为此设置一个static标志,并在按下button1时为其分配1,并在按下按钮1时为其分配2按钮 2 被按下。然后您可以检查 onActivityResult() 中的标志。你可以这样做:

public static int editTextNumber = 0;


public void openScanner1 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator (this);
scanIntegrator.initiateScan();
editTextNumber  = 1;
}


public void openScanner2 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator(this);
scanIntegrator.initiateScan();
editTextNumber = 2;
}

然后在你的onActivityResult()

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

//Places barcode in the scan_content editext


Log.e("editTextNumber",""+ editTextNumber ); // check whats value here
if (scanningResult != null && editTextNumber == 1) { // checking for flag here
    String scanContent = scanningResult.getContents();
    contentTxt.setText(scanContent);
}

//places bar code in the scan_content2 edittext
else if (scanningResult !=null && editTextNumber == 2) {  // checking for flag also
    String scanContent = scanningResult.getContents();
    contentTxt2.setText(scanContent);
}


else{
    Toast toast = Toast.makeText(getApplicationContext(),
            "No scan data received!", Toast.LENGTH_SHORT);
    toast.show();
   }

}

关于java - Android Studio 条码扫描器应用程序。通过 Intent 扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370758/

相关文章:

java - 在 Spring Boot/FreeMarker 中加载图像时出现问题

android - 内容提供商查询()未被调用(安卓电视)

java - Android studio Firebase数据库查询选中值

android - 在 Android 中将字符串从一个类传递到另一个类

java - 向内部 PDF 文件添加超链接

java - 捕获整个 Windows 声音输出?

java - 更改数据值后如何重新启动Handler?

android - checkboxpreference android中的多重依赖

android - 从包中检索 android.intent.extra.EMAIL 值

android - 如何验证系统中的其他应用程序是否为正版?