2016-07-13 20 views
2

Ich habe an einer App gearbeitet, die die Taschenlampe an einem Android-Telefon ein- und ausschalten muss. Ich brauche eine Möglichkeit, die Taschenlampe über alle Versionen von Android über API 15 einzuschalten. Das Problem ist, auf älteren Telefonen (API < 21) muss ich die traditionelle Weise (unten) verwenden. Aber auf neueren Handys, wie meinem Nexus 6P, muss ich die Camera2 Schnittstelle benutzen (unter dem unten). Gibt es eine Möglichkeit, die Taschenlampe an ALLEN Android-Versionen mit einem einzigen Code arbeiten zu lassen?Android Taschenlampe in allen Versionen von Android einschalten?

Unten:

camera = Camera.open(); 
Camera.Parameters parameters = camera.getParameters(); 
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
camera.setParameters(parameters); 
camera.startPreview(); 

camera = Camera.open(); 
Camera.Parameters parameters = camera.getParameters(); 
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
camera.setParameters(parameters); 
camera.stopPreview(); 
// camera.release(); used later when app closes 

Unter dem Unten:

CameraManager cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); 
String cameraId = cameraManager.getCameraIdList()[0]; 
cameraManager.setTorchMode(cameraId, state); // state is either true or false 
+0

Ich sehe, dass die Anrufe veraltet sind, aber nicht unbrauchbar. Könnten Sie nicht den traditionellen Weg für alle Geräte nutzen? – Bill

+0

Aus irgendeinem Grund, nein. Mein Nexus 6P funktioniert nicht, wenn Sie die normale API verwenden. Der Android Monitor gibt Folgendes aus: 'E/Kamera: Error 2'. Ich habe diesen Fehler vorher ohne Hilfe nachgeschlagen. Gibt es irgendwo eine Liste von Kamerafehlern oder funktioniert die ursprüngliche API nicht? – AngryCupcake274

+0

vielleicht hilft die Antwort hier: http://stackoverflow.com/questions/34557157/android-flashlight-code-not-working?rq=1 – Bill

Antwort

1

Eine mögliche Lösung Segment unterschiedliche sdk Versionen während der Laufzeit zu bestimmen, welche Methode zu wählen:

private final int sdkVersion = Build.VERSION.SDK_INT; 

    if (sdkVersion < Build.VERSION_CODES.LOLLIPOP) { 
     //do old way 
    } else { 
     //do new way 
    } 

Mehr Informationen hier: How to support multiple android version in your code?

+0

Ich habe das verwendet, aber Samsung-Handys unterstützen Camera2 nicht, auch wenn sie habe eine 21+ API Version. Es verlangsamt auch Code mit einer try/catch-Anweisung. – AngryCupcake274