如何使用ZXING扫描结果

问题描述:

我对此感到失望。我在android开发中有点新鲜感。如何使用ZXING扫描结果

我想使用ZXING的扫描结果。我将ZXING整合到我的android应用程序中,扫描工作正常。现在我想使用扫描结果来更新主活动中的TextView。

我该怎么做?

我的代码是做现在以下:

  1. 打开一个按钮主要活动。
  2. 点击按钮激活扫描仪。
  3. 扫描完成后,返回到主要活动。
  4. TextView是空的,由于某种原因,它从横向移动到纵向后会回到原始内容。

(2)我想使用扫描结果更新主活动(我的代码中的电视)中的TextView。

请大家帮忙, 谢谢。

我的代码:

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

} 

}

+0

将扫描的信息存储在本地并检索您想要的位置。 – RAAAAM 2012-03-31 10:39:08

+0

你能为我解释怎么做吗?谢谢! – Ohadza 2012-03-31 11:03:10

移动以下块

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

在清单的变化添加这主要活动添加机器人:configChanges = “方向”

<activity android:name="..." 
      android:label="@string/appName" 
      android:configChanges="orientation" 
+0

我试过了,只有在景观时才有效。当我在设备上更改为肖像时,文字消失。感谢您的快速回复:) – Ohadza 2012-03-31 10:46:32

+2

您必须在清单文件中包含android:configChanges =“orientation | keyboardHidden”。所以无论何时方向改变,它都不会重新加载应用程序。 – RAAAAM 2012-03-31 11:03:26

+0

@Ohadza看到我的编辑。 – 2012-03-31 11:09:53

当你调用 startActivityForResult()

所谓的活动设置它的数据,它在你的活动中调用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 
     } 
} 

} 

} 
+0

请注意,当您切换方向时,会调用'onCreate()',因此您需要存储上次读取的数据并将其检索到'onCreate()' – user1304907 2012-03-31 10:54:56

+0

我该怎么做? – Ohadza 2012-03-31 10:59:07

+1

@Ohadza发送内容到其他活动使用'putExtras()'的意图,调用其他活动,采取的键,值对,在这里检查http://developer.android.com/reference/android/content/Intent。 html#putExtra%28java.lang.String,%20java.lang.CharSequence%29 – user1304907 2012-03-31 13:00:43