开发者社区 问答 正文

我的应用未运行旧库zxing

此代码有什么问题?我在MainActivity中运行以下代码,但仅得到一个空应用程序:


    package com.example.testbar;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import com.google.zxing.Result;
import android.util.Log;
import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
    private ZXingScannerView mScannerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        // Programmatically initialize the scanner view
        mScannerView = new ZXingScannerView(this);
        setContentView(mScannerView);
    }
    @Override
    public void handleResult(Result rawResult) {
        // Do something with the result here
        Log.v("TAG", rawResult.getText()); // Prints scan results
        // Prints the scan format (qrcode, pdf417 etc.)
        Log.v("TAG", rawResult.getBarcodeFormat().toString());
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Scan Result");
        builder.setMessage(rawResult.getText());
        AlertDialog alert1 = builder.create();
        alert1.show();

        // If you would like to resume scanning, call this method below:
        mScannerView.resumeCameraPreview(this);
    }

    @Override
    public void onResume() {
        super.onResume();
        // Register ourselves as a handler for scan results.
        mScannerView.setResultHandler(this);
        // Start camera on resume
        mScannerView.startCamera();
    }

    @Override
    public void onPause() {
        super.onPause();
        // Stop camera on pause
        mScannerView.stopCamera();
    }

}

我已经在AndroidManifest.xml文件中写入了权限:

    <uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>

该代码在Android Studio中构建时没有错误,但是我只得到一个空应用程序……而该应用程序运行时没有摄像头。

展开
收起
Puppet 2020-01-18 10:59:03 431 分享 版权
1 条回答
写回答
取消 提交回答
  • 您应遵循Android的文档检查和请求权限。 https://developer.android.com/training/permissions/requesting

    我已经修改了您的代码,这应该是一个有效的示例。

    
    public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
        private ZXingScannerView mScannerView;
        private static final int MY_PERMISSIONS_REQUEST_CAMERA = 101;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.activity_main);
            // Programmatically initialize the scanner view
            mScannerView = new ZXingScannerView(this);
            setContentView(mScannerView);
        }
    
        @Override
        public void handleResult(Result rawResult) {
            // Do something with the result here
            Log.v("TAG", rawResult.getText()); // Prints scan results
            // Prints the scan format (qrcode, pdf417 etc.)
            Log.v("TAG", rawResult.getBarcodeFormat().toString());
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Scan Result");
            builder.setMessage(rawResult.getText());
            AlertDialog alert1 = builder.create();
            alert1.show();
    
            // If you would like to resume scanning, call this method below:
            mScannerView.resumeCameraPreview(this);
        }
    
        @Override
        public void onResume() {
            super.onResume();
            // Register ourselves as a handler for scan results.
            mScannerView.setResultHandler(this);
            // Start camera on resume
    
            if (hasPermission(Manifest.permission.CAMERA)) {
                startCamera();
            }
        }
    
        @Override
        public void onPause() {
            super.onPause();
            // Stop camera on pause
            mScannerView.stopCamera();
        }
    
        private void startCamera() {
            mScannerView.startCamera();
        }
    
        private Boolean hasPermission(String permission) {
            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                // you need to request the permission
                Log.d("TAG", "User hasn't granted permission.");
    
                // No explanation needed for camera. request the permission
                ActivityCompat.requestPermissions(this,
                        new String[]{permission},
                        MY_PERMISSIONS_REQUEST_CAMERA);
            }
            else {
                Log.d("TAG",  "User already granted permission.");
                return true;
            }
            return false;
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_CAMERA:
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        startCamera();
                    } else {
                        Log.d("TAG", "Permission denied by user...");
                    }
                    break;
            }
        }
    }
    
    2020-01-18 10:59:31
    赞同 展开评论
问答分类:
问答地址: