Ich möchte die Methode "Camera.open () von Android" auf zwei separaten API-Ebenen verwenden: Erstens API-Level 7, das 2.1 und höher ist, und zweitens 2.3.3 und 2.3.4, die API-Level 9 sind.
Auf API-Ebene 7 und 8 verwendet die Camera.open-Methode keine Argumente. Auf API-Ebene 9 und höher nimmt die Kamera ein Integer-Argument, das ihr die zu verwendende cameraId liefert.
Wie kann ich beide API-Ebenen im selben Code ausrichten? Etwas ähnlich zu diesem Pseudocode:
Camera lCamera;
if (Platform.APILevel < 7){
lCamera.open();
}else {
lCamera.open(0);
}
Antworten:
7 für die Antwort № 1Wir machen oft Reflexionserkennung. Etwas wie:
public Camera getCamera() {
try {
Method method = Camera.class.getMethod("open", Integer.TYPE);
return (Camera) method.invoke(null, 0);
} catch (Exception e) {
// Yes, I really want to handle all exceptions here!!!!
Log.d(TAG,"Error when trying to invoke Camera.open(int), reverting to open()",e);
return Camera.open();
}
}
2 für die Antwort № 2
Im Allgemeinen zielen Sie nur auf die niedrigste API-Ebene, mit der Sie durchkommen können. Alles, was für API-Level 7 erstellt wird, funktioniert für API-Level 8, 9, 10 usw. Rufen Sie in diesem Fall einfach an lCamera.open();
und es wird die erste nach hinten gerichtete Kamera auswählen. Wenn Sie eine Frontkamera verwenden möchten, müssen Sie die höhere API-Ebene 9 verwenden.
2 für die Antwort № 3
Sie können die API-Ebene durch Lesen der final static
ganze Zahl android.os.Build.VERSION.SDK_INT
.
Stellen Sie in Ihrem Manifest sicher, dass Sie festlegen android:minSdkVersion
UND android:targetSdkVersion
.