将另一个 class 中的 zxing 条码扫描器的结果发送到 Main class 和 activity
Sending result of zxing barcode scanner in another class to Main class and activity
我是 Java 和 Android 的新手,所以有些错误可能是基本的。
我创建了两个 classes:Rdiet_Main.java
和 Rdiet_Zxing.java
。过去一切都在同一个 class 中,但我想为每个 class.
保留一个功能
当按下扫描按钮时,这发生在 Rdiet_Main:
Rdiet_Zxing zxScan = new Rdiet_Zxing();
zxScan.acquireBarcode(this);
然后进入 Rdiet_Zxing:
public void acquireBarcode(Rdiet_Main t){
IntentIntegrator scanBarcodeIntegrator = new IntentIntegrator(t);
scanBarcodeIntegrator.initiateScan();
}
public String onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanBarcodeResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if(scanBarcodeResult != null){
String strResult;
strResult = scanBarcodeResult.getContents();
return strResult;
}
else{
return null;
}
}
我想将条形码发送到Rdiet_Main。我应该如何更改我的代码以使其成为可能?
编辑:
我现在用startActivityForResult
。但是,当按下按钮时,扫描仪不会启动,应用程序只会崩溃(无法在 AndroidManifest.xml 中找到明确的 Activity Class)。我认为 Rdiet_Zxing 需要链接到 CaptureActivity 或类似的东西。
这是我的 AndroidManifest.xml
里面的东西
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Rdiet_Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
编辑2:
已更新Rdiet_Zxing.java
:
public class Rdiet_Zxing extends Activity{
public static final int SUCCESS_RETURN_CODE = 1;
public static final int FAILURE_RETURN_CODE = 2;
public void acquireBarcode(Rdiet_Main t){
IntentIntegrator scanBarcodeIntegrator = new IntentIntegrator(t);
scanBarcodeIntegrator.initiateScan();
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanBarcodeResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if(scanBarcodeResult != null){
String strResult;
strResult = scanBarcodeResult.getContents();
//SOL1
Intent intentResult = new Intent();
Bundle b = new Bundle();
b.putString("myResult", strResult);
intentResult.putExtras(b);
setResult(SUCCESS_RETURN_CODE, intentResult);
finish();
//-------------
}
else{
setResult(FAILURE_RETURN_CODE, null);
finish();
}
}
}
已更新Rdiet_Main.java
:
//Scan button
Intent i = new Intent(Rdiet_Main.this, Rdiet_Zxing.class);
startActivityForResult(i, SUB_ACTIVITY_REQUEST_CODE);
//ScanResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SUB_ACTIVITY_REQUEST_CODE) {
Bundle b = data.getExtras();
strBarcode = b.getString("myResult");
tbxAPIbarcode.setText(strBarcode);
}
}
您可以在同一个 class 中完成所有这些事件,或者您可以使用 'sub activity'。
编辑:这里是例子
在您的主 activity 中,当您按下按钮时:
Intent i = new Intent(Rdiet_Main.this, Rdiet_Zxing.class);
startActivityForResult(i, SUB_ACTIVITY_REQUEST_CODE);
然后,您将启动扫描仪。当您得到结果时:
public String onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanBarcodeResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if(scanBarcodeResult != null){
String strResult;
strResult = scanBarcodeResult.getContents();
//Add these lines
Intent intent = new Intent();
Bundle b = new Bundle();
b.putString("myResult", strResult);
intent.putExtras(b);
setResult(SUCCESS_RETURN_CODE, intent);
finish();
//-------------
return strResult;
}
else{
return null;
}
}
同样在扫描器中 activity 将其添加为全局:
public static final int SUCCESS_RETURN_CODE = 1;
并且在主要 activity:
private static final int SUB_ACTIVITY_REQUEST_CODE = 100;
最后,要在 main 中得到结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SUB_ACTIVITY_REQUEST_CODE) {
Bundle b = data.getExtras();
String result = b.getString("myResult");
}
}
编辑2:
当您创建一个新的 activity 时,它必须添加到您的清单中,但如果没有,您可以这样添加,
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Rdiet_Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- added here -->
<activity android:name=".Rdiet_Zxing"></activity>
</application>
希望对您有所帮助。
创建如下回调
public interface CallbackToMain {
void result(String scanvalue);
}
在您的 Redit_Main Activity.
上实施
在 Redit_Main 中创建 Rdiet_Zxing class 的对象并传递接口引用。
Rdiet_Zxing zxScan = new Rdiet_Zxing(this); // this refered to callback interface.
zxScan.acquireBarcode();
在 Redit_Zxing 中执行如下操作。
CallbackToMain callback;
public void Rdiet_Zxing(CallbackToMain callback){
this.callback=callback;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callback.result("your scanned value");
}
我是 Java 和 Android 的新手,所以有些错误可能是基本的。
我创建了两个 classes:Rdiet_Main.java
和 Rdiet_Zxing.java
。过去一切都在同一个 class 中,但我想为每个 class.
当按下扫描按钮时,这发生在 Rdiet_Main:
Rdiet_Zxing zxScan = new Rdiet_Zxing();
zxScan.acquireBarcode(this);
然后进入 Rdiet_Zxing:
public void acquireBarcode(Rdiet_Main t){
IntentIntegrator scanBarcodeIntegrator = new IntentIntegrator(t);
scanBarcodeIntegrator.initiateScan();
}
public String onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanBarcodeResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if(scanBarcodeResult != null){
String strResult;
strResult = scanBarcodeResult.getContents();
return strResult;
}
else{
return null;
}
}
我想将条形码发送到Rdiet_Main。我应该如何更改我的代码以使其成为可能?
编辑:
我现在用startActivityForResult
。但是,当按下按钮时,扫描仪不会启动,应用程序只会崩溃(无法在 AndroidManifest.xml 中找到明确的 Activity Class)。我认为 Rdiet_Zxing 需要链接到 CaptureActivity 或类似的东西。
这是我的 AndroidManifest.xml
里面的东西<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Rdiet_Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
编辑2:
已更新Rdiet_Zxing.java
:
public class Rdiet_Zxing extends Activity{
public static final int SUCCESS_RETURN_CODE = 1;
public static final int FAILURE_RETURN_CODE = 2;
public void acquireBarcode(Rdiet_Main t){
IntentIntegrator scanBarcodeIntegrator = new IntentIntegrator(t);
scanBarcodeIntegrator.initiateScan();
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanBarcodeResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if(scanBarcodeResult != null){
String strResult;
strResult = scanBarcodeResult.getContents();
//SOL1
Intent intentResult = new Intent();
Bundle b = new Bundle();
b.putString("myResult", strResult);
intentResult.putExtras(b);
setResult(SUCCESS_RETURN_CODE, intentResult);
finish();
//-------------
}
else{
setResult(FAILURE_RETURN_CODE, null);
finish();
}
}
}
已更新Rdiet_Main.java
:
//Scan button
Intent i = new Intent(Rdiet_Main.this, Rdiet_Zxing.class);
startActivityForResult(i, SUB_ACTIVITY_REQUEST_CODE);
//ScanResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SUB_ACTIVITY_REQUEST_CODE) {
Bundle b = data.getExtras();
strBarcode = b.getString("myResult");
tbxAPIbarcode.setText(strBarcode);
}
}
您可以在同一个 class 中完成所有这些事件,或者您可以使用 'sub activity'。
编辑:这里是例子
在您的主 activity 中,当您按下按钮时:
Intent i = new Intent(Rdiet_Main.this, Rdiet_Zxing.class);
startActivityForResult(i, SUB_ACTIVITY_REQUEST_CODE);
然后,您将启动扫描仪。当您得到结果时:
public String onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanBarcodeResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if(scanBarcodeResult != null){
String strResult;
strResult = scanBarcodeResult.getContents();
//Add these lines
Intent intent = new Intent();
Bundle b = new Bundle();
b.putString("myResult", strResult);
intent.putExtras(b);
setResult(SUCCESS_RETURN_CODE, intent);
finish();
//-------------
return strResult;
}
else{
return null;
}
}
同样在扫描器中 activity 将其添加为全局:
public static final int SUCCESS_RETURN_CODE = 1;
并且在主要 activity:
private static final int SUB_ACTIVITY_REQUEST_CODE = 100;
最后,要在 main 中得到结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SUB_ACTIVITY_REQUEST_CODE) {
Bundle b = data.getExtras();
String result = b.getString("myResult");
}
}
编辑2:
当您创建一个新的 activity 时,它必须添加到您的清单中,但如果没有,您可以这样添加,
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Rdiet_Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- added here -->
<activity android:name=".Rdiet_Zxing"></activity>
</application>
希望对您有所帮助。
创建如下回调
public interface CallbackToMain { void result(String scanvalue); }
在您的 Redit_Main Activity.
上实施
在 Redit_Main 中创建 Rdiet_Zxing class 的对象并传递接口引用。
Rdiet_Zxing zxScan = new Rdiet_Zxing(this); // this refered to callback interface. zxScan.acquireBarcode();
在 Redit_Zxing 中执行如下操作。
CallbackToMain callback; public void Rdiet_Zxing(CallbackToMain callback){ this.callback=callback; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callback.result("your scanned value"); }