को फ्रीज करने का कारण बन रहा है, मैं एक ऐप बना रहा हूं जिसमें Google दृष्टि एपीआई का उपयोग कर एक क्यूआर स्कैनर है। क्यूआर कोड पढ़ने के बाद मुझे कैमरे को रोकने में परेशानी हो रही है। प्रवाह MainActivity -> QrActivity
एक बार qr-code को पहचानने के बाद ऐप को मुख्य गतिविधि पर वापस जाना चाहिए।एंड्रॉइड कैमरासोर्स.स्टॉप() ऐप को
यदि मैं cameraSource.release()
पर कॉल नहीं करता हूं तो यह ठीक काम करता है लेकिन डिवाइस बहुत गर्म हो जाता है और बैटरी नाली पर इसका महत्वपूर्ण प्रभाव पड़ता है। हालांकि अगर मैं कैमरा स्रोत जारी करता हूं तो मुख्य गतिविधि असंगत हो जाती है और ऐप क्रैश हो जाएगा।
यह उत्तरदायी क्यों हो रहा है? और कैमरा स्रोत को जारी करने के लिए सही जगह कहां है?
QrActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qr);
cancelBtn = (Button) findViewById(R.id.cancel_button);
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
new QrReader(this);
}
QrReader कक्षा
public class QrReader {
private static final String TAG = "QrReader";
private SurfaceView cameraView;
private TextView barcodeInfo;
private BarcodeDetector barcodeDetector;
private CameraSource cameraSource;
private Activity mActivity;
private AccessPointCredentials barCodeData;
public QrReader(Activity activity) {
this.mActivity = activity;
cameraView = (SurfaceView) mActivity.findViewById(R.id.camera_view);
barcodeInfo = (TextView) mActivity.findViewById(R.id.code_info);
barcodeDetector =
new BarcodeDetector.Builder(mActivity)
.setBarcodeFormats(Barcode.QR_CODE)
.build();
cameraSource = new CameraSource
.Builder(mActivity, barcodeDetector)
.setAutoFocusEnabled(true)
.build();
cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
cameraSource = new CameraSource
.Builder(mActivity, barcodeDetector)
.setAutoFocusEnabled(true)
.setFacing(0)
.build();
try {
cameraSource.start(cameraView.getHolder());
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// Log.i(TAG, "surfaceDestroyed: stopping camera Source");
// cameraSource.release();
}
});
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
Log.i(TAG, "release: ");
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barCodes = detections.getDetectedItems();
if (barCodes.size() != 0) {
Log.i(TAG, "received a Barcode");
barcodeInfo.post(new Runnable() { // Use the post method of the TextView
public void run() {
barcodeInfo.setText(barCodes.valueAt(0).displayValue);
}
});
Gson g = new Gson();
try {
barCodeData = g.fromJson(barCodes.valueAt(0).rawValue, AccessPointCredentials.class);
} catch (Exception e) {
barCodeData = new AccessPointCredentials();
barCodeData.setSsid(barCodes.valueAt(0).rawValue);
barCodeData.setPass(null);
e.printStackTrace();
}
connectToWifi(barCodeData);
// CameraSource.release causes app to freeze
// cameraSource.release();
}
}
});
}
private void connectToWifi(final AccessPointCredentials credentials) {
//wificonnect code
}
}
यकीन है, लेकिन ध्यान दें CameraSource का एक खुला स्रोत की नकल है कि आप अगर आप आगे इस में खुदाई करने के लिए करना चाहते हैं की कोशिश कर सकते है कि वहाँ: https://github.com/googlesamples/android-vision /blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/ui/camera/CameraSource.java#L322 – pm0733464
मैंने 'कैमरा सॉस' को कॉल करने का प्रयास किया है। रिलीज() 'दो स्थानों पर टिप्पणी की गई है (' सतह पर आधारित() 'और' प्राप्तकर्ताओं() ' – Lonergan6275