如何使用ZXING扫描结果

4

我正在为这个问题苦恼。我在安卓开发方面比较新。

我想使用ZXING的扫描结果。我已将ZXING集成到我的安卓应用中,扫描工作正常。现在我想使用扫描结果更新主活动中的TextView。

我该怎么做呢?

目前我的代码执行以下操作:

  1. 通过按钮打开主活动。
  2. 点击按钮激活扫描器。
  3. 扫描后返回主活动。
  4. TextView为空,并且由于某些原因,在从横屏转换为竖屏时它会回到原始内容。

(2)之后,我想使用扫描结果来更新主活动中的TextView (我的代码中的tv)。

请帮帮我,谢谢。

我的代码:

public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button pressToScan = (Button) findViewById(R.id.button1);

    pressToScan.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent data = new Intent("com.google.zxing.client.android.SCAN");
            data.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(data, 0);

TextView tv = (TextView) findViewById(R.id.scanResult);
                tv.setText(data.getStringExtra("SCAN_RESULT"));
        }
    });
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    String contents = null;
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0) {
          if (resultCode == RESULT_OK) {
             contents = data.getStringExtra("SCAN_RESULT");
             String format = data.getStringExtra("SCAN_RESULT_FORMAT");

             // Handle successful scan
          } else if (resultCode == RESULT_CANCELED) {
             // Handle cancel
          }
    }

}

}


将扫描的信息存储在本地,并随时检索。 - RAAAAM
你能为我解释一下如何做吗?谢谢! - Ohadza
2个回答

6

移动以下代码块

TextView tv = (TextView) findViewById(R.id.scanResult);
tv.setText(data.getStringExtra("SCAN_RESULT"));

to

public void onActivityResult(int requestCode, int resultCode, Intent data) {
String contents = null;
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
      if (resultCode == RESULT_OK) {
         contents = data.getStringExtra("SCAN_RESULT");
         String format = data.getStringExtra("SCAN_RESULT_FORMAT");
         //moved here
         TextView tv = (TextView) findViewById(R.id.scanResult);
         tv.setText(contents);
         // Handle successful scan
      } else if (resultCode == RESULT_CANCELED) {
         // Handle cancel
      }
}

}

[编辑]

将此添加到您的活动中

@Override
public void onConfigurationChanged(Configuration newConfig){        
    super.onConfigurationChanged(newConfig);
}

在清单文件中更改主活动,以添加android:configChanges =“orientation”属性。
<activity android:name="..."
          android:label="@string/appName"
          android:configChanges="orientation"

我尝试过了,只有在横屏模式下才有效。当我在设备上切换为竖屏模式时,文本就消失了。顺便说一句,谢谢你的快速回复 :) - Ohadza
2
你必须在清单文件中包含 android:configChanges="orientation|keyboardHidden",这样无论何时方向发生改变,应用程序都不会重新加载。 - RAAAAM
太好了!谢谢。你知道我怎么把“内容”发送到另一个Activity吗? - Ohadza
明白了,我忘记在清单文件中添加第二个活动。 - Ohadza

1
当你调用startActivityForResult()时,当被调用的Activity设置了数据时,它会在你的Activity中调用onActivityResult()方法。 startActivityForResult()不会暂停方法的执行,因此编写代码的正确方式是:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
String contents = null;
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
      if (resultCode == RESULT_OK) {
         contents = data.getStringExtra("SCAN_RESULT");
         String format = data.getStringExtra("SCAN_RESULT_FORMAT");
         tv.setText(contents);

         // Handle successful scan
      } else if (resultCode == RESULT_CANCELED) {
         // Handle cancel
      }
}

}

}

请注意,当您切换方向时,将调用onCreate(),因此您需要存储最后读取的数据并在onCreate()中检索它。 - user1304907
1
要将内容发送到其他活动,请在调用其他活动的意图上使用 putExtras(),该意图采用键值对。请查看此处:http://developer.android.com/reference/android/content/Intent.html#putExtra%28java.lang.String,%20java.lang.CharSequence%29 - user1304907
我知道那个,但是我这个笨蛋没有在清单文件中添加第二个活动。谢谢你的帮助! - Ohadza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接