Ich entwickle eine Android-App, mit der Benutzer einen QR-Code-Inhalt überprüfen und etwas entsprechend lesen Ergebnis ausführen können.Create on click Fokus auf CameraSource - Android QR Code Erkennung
Um die Leistung zu verbessern und ich möchte 2 Methoden implementieren:
- onClickFocus (der Benutzer die Kamera zu konzentrieren, wenn der Bildschirm geklickt wird)
- TurnOn/OFF Blitz (der Benutzer erlaubt, zum ein-/ausschalten der Blitz)
ich habe einige graben getan und herausgefunden, dass für Kamera und Blitz verwalte ich die Camera
als Objekt zu verwalten selbst in der Lage sein müssen.
Und hier beginnt der Albtraum.
Ich benutze den folgenden Code, um Kameraergebnis anzuzeigen und QR-Codes zu verfolgen.
import android.app.FragmentTransaction;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;
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 MainReadActivity extends AppCompatActivity {
public SurfaceView cameraView;
private TextView barcodeInfo;
public BarcodeDetector barcodeDetector;
public CameraSource cameraSource;
public Vibrator v;
public String textInfo;
public DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_read);
v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout_main);
getSupportFragmentManager().findFragmentById(R.id.drawer_layout_main);
cameraView = (SurfaceView) findViewById(R.id.camera_view);
//barcodeInfo = (TextView) findViewById(R.id.code_info);
barcodeDetector = new BarcodeDetector.Builder(this)
.setBarcodeFormats(Barcode.QR_CODE)
.build();
cameraSource = new CameraSource.Builder(this, barcodeDetector).build();
cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
cameraSource.start(cameraView.getHolder());
} catch (IOException ie) {
Log.e("CAMERA SOURCE", ie.getMessage());
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cameraSource.stop();
}
});
barcodeDetector.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) {
new Runnable() { // Use the post method of the TextView
public void run() {
v.vibrate(500);
// textInfo = barcodes.valueAt(0).displayValue;
MyFragmentDialog newf = new MyFragmentDialog();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newf);
transaction.addToBackStack("tag");
transaction.commit();
}
};
}
}
});
}
public void onBackPressed() {
// do nothing
}
}
Also, ich brauche Zugriff auf die Kamera zu bekommen, von CameraSource (bin ich richtig ?!) Wenn es nicht möglich ist, ich diese CameraSource Klasse von GoogleSamples git verwenden tryed die setFocusMode Methode zu verwenden. .. Aber leider war ich nicht erfolgreich.
Ich habe auch versucht, API 21 zu verwenden, da API 22 no longer supports Kamera und CameraPreferences.
Ich bin mir ziemlich sicher, das ist nicht nur mein Problem, aber ich konnte keinen Weg finden, es zu beheben.
Jeder kann helfen?
FIXED:
einfach dieses CameraSource verwenden (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). Ja, ich weiß, ich habe es vorgeschlagen ... Aber dieses Mal habe ich mein Problem gelöst! Also, wenn Sie diese verwenden werden, stellen Sie sicher, dass Ihre Kompilierung wie folgt aussieht:
compile 'com.google.android.gms:play-services:8.1.0'
Ich habe versucht. Das Ergebnis ist 'kann Methode nicht auflösen .setAutoFocusEnabled (boolean)' –