Java Mobile vision未检测到二维码
我正在尝试将二维码扫描功能添加到我的应用程序中。我用谷歌视觉检测二维码。但是,它无法检测代码。即使Detector.isOperational()返回true,但什么也没有发生。我猜预览质量很难扫描QR,这就是它失败的原因。 代码如下。多谢各位Java Mobile vision未检测到二维码,java,android,android-layout,camera,qr-code,Java,Android,Android Layout,Camera,Qr Code,我正在尝试将二维码扫描功能添加到我的应用程序中。我用谷歌视觉检测二维码。但是,它无法检测代码。即使Detector.isOperational()返回true,但什么也没有发生。我猜预览质量很难扫描QR,这就是它失败的原因。 代码如下。多谢各位 package com.example.tng import androidx.appcompat.app.AppCompatActivity; import android.graphics.SurfaceTexture; import
package com.example.tng代码>
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.TextureView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;
public class ScanQR extends AppCompatActivity implements TextureView.SurfaceTextureListener{
TextureView textureView;
TextureView textureView;
TextView displayResult;
BarcodeDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan_q_r);
displayResult = findViewById(R.id.alignQR);
textureView = findViewById(R.id.texture_view);
textureView.setSurfaceTextureListener(this);
detector = new BarcodeDetector.Builder(this).
setBarcodeFormats(Barcode.QR_CODE).
build();
try {
if (detector.isOperational()) {
displayResult.setText("it works");
} else {
displayResult.setText("Nope");
}
}
catch (Exception e){
Toast test = Toast.makeText(this,e.toString(),Toast.LENGTH_LONG);
test.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
test.show();
}
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
try{
cam = Camera.open();
test.show();
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
try{
cam = Camera.open();
cam.setPreviewTexture(surface);
cam.setDisplayOrientation(90);
cam.startPreview();
detector.setFocus(1);
detector.setProcessor(new Detector.Processor<Barcode>(){
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barcodes = detections.getDetectedItems();
if(barcodes.size() != 0){
displayResult.post(new Runnable() {
@Override
public void run() {
displayResult.setText(barcodes.valueAt(0).displayValue);
}
});
}
}
});
}
catch(Exception camException){
Toast.makeText(this,camException.toString(),Toast.LENGTH_LONG).show();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
cam.stopPreview();
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
}
导入androidx.appcompat.app.appcompat活动;
导入android.graphics.SurfaceTexture;
导入android.hardware.Camera;
导入android.os.Bundle;
导入android.util.SparseArray;
导入android.view.Gravity;
导入android.view.TextureView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.vision.Detector;
导入com.google.android.gms.vision.barcode.barcode;
导入com.google.android.gms.vision.barcode.barcode检测器;
公共类ScanQR扩展AppCompatActivity实现TextureView.SurfaceTextRelistener{
纹理视图纹理视图;
纹理视图纹理视图;
文本视图显示结果;
条码检测器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u scan\u q\R);
displayResult=findViewById(R.id.alignQR);
textureView=findViewById(R.id.texture\u视图);
textureView.setSurfaceTextureListener(此);
检测器=新的条形码检测器.Builder(此)。
setBarcodeFormats(条形码、QR\U码)。
build();
试一试{
if(检测器等操作()){
displayResult.setText(“它工作”);
}否则{
displayResult.setText(“Nope”);
}
}
捕获(例外e){
Toast test=Toast.makeText(例如,toString(),Toast.LENGTH\u LONG);
测试。设置重力(重力。上|重力。左,0,0);
test.show();
}
}
@凌驾
SurfaceTextureAvailable上的公共空心(SurfaceTexture曲面、整型宽度、整型高度){
试一试{
cam=摄影机。打开();
test.show();
}
@凌驾
SurfaceTextureAvailable上的公共空心(SurfaceTexture曲面、整型宽度、整型高度){
试一试{
cam=摄影机。打开();
cam.setPreviewTexture(曲面);
凸轮设置显示方向(90);
cam.startPreview();
探测器。设置焦点(1);
detector.setProcessor(新的detector.Processor(){
@凌驾
公开无效释放(){
}
@凌驾
公共空隙接收检测(检测器。检测){
最终SparseArray条形码=检测。getDetectedItems();
如果(条形码大小()!=0){
displayResult.post(新的Runnable(){
@凌驾
公开募捐{
displayResult.setText(条形码.valueAt(0).displayValue);
}
});
}
}
});
}
捕获(异常CAMEException){
Toast.makeText(this,camException.toString(),Toast.LENGTH_LONG).show();
}
}
@凌驾
SurfaceTextureSizeChanged上的公共空心(SurfaceTexture surface,int-width,int-height){
}
@凌驾
公共布尔onSurfaceTextureDestroyed(SurfaceTexture曲面){
cam.stopPreview();
返回false;
}
@凌驾
已更新SurfaceTexture上的公共空间(SurfaceTexture surface){
}
}
你能上传正确格式的代码吗?在Android Studio的左侧有你的文件树->右键单击你的文件->重新格式化代码,但是没有“重新格式化代码”文件层次结构中的选项,当您在ScanQr类中并按下此处找到的快捷方式时,是否会发生任何事情:您现在可以看到我的代码,并且我已经按照您所说的正确格式化了它。