我正在做二维码扫描仪项目。我进行了两项活动,例如主要活动和扫描活动。主活动中有一个 EditText 视图和一个按钮。在这里,如果您单击按钮扫描活动运行并扫描二维码。然后结果将显示在 EditText 中。当我点击按钮时,拳头一切正常。但是再点击一下,它就不再起作用了。
这里是 MainAcivity.java
package com.example.scanner_v1;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_SCAN = 100;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
Button scanButton = findViewById(R.id.scanButton);
scanButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,ScanActivity.class);
startActivityForResult(intent,REQUEST_CODE_SCAN);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode,@Nullable Intent data){
super.onActivityResult(resultCode,resultCode,data);
if(requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK && data != null){
String barcode = data.getStringExtra("barcode");
editText.setText(barcode);
}
}
}
这里是 ScanActivity.java
package com.example.scanner_v1;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.SurfaceView;
import android.widget.Toast;
import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;
import java.io.IOException;
public class ScanActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CAMERA = 1;
private SurfaceView surfaceView;
private BarcodeDetector barcodeDetector;
private CameraSource cameraSource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan);
surfaceView = findViewById(R.id.surfaceView);
// Create BarcodeDetector and CameraSource
barcodeDetector = new BarcodeDetector.Builder(this)
.setBarcodeFormats(Barcode.QR_CODE)
.build();
cameraSource = new CameraSource.Builder(this, barcodeDetector)
.setRequestedPreviewSize(640, 480)
.setAutoFocusEnabled(true)
.build();
// Check for camera permission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA);
} else {
startCamera();
}
}
private void startCamera() {
try {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
cameraSource.start(surfaceView.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
SparseArray<Barcode> barcodes = detections.getDetectedItems();
if (barcodes.size() > 0) {
String barcodeValue = barcodes.valueAt(0).displayValue;
Intent intent = new Intent();
intent.putExtra("barcode", barcodeValue);
setResult(RESULT_OK, intent);
finish();
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CAMERA) {
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED) {
startCamera();
} else {
Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
barcodeDetector.release();
cameraSource.release();
}
private void stopCamera() {
if (cameraSource != null) {
cameraSource.stop();
}
}
@Override
protected void onResume() {
super.onResume();
startCamera(); // Restart the camera preview when the activity resumes
}
@Override
protected void onPause() {
super.onPause();
stopCamera(); // Stop the camera preview when the activity pauses
}
}
这里是build.gradle文件
plugins {
id 'com.android.application'
}
android {
namespace 'com.example.scanner_v1'
compileSdk 33
defaultConfig {
applicationId "com.example.scanner_v1"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
依赖关系{
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
//Barcode
implementation 'com.google.android.gms:play-services-vision:20.1.3'
}
现在,如何解决这个问题?