古いAndroidのバージョン用の古いカメラAPIと、23以上の新しいcamera2/torch APIを使用するアプリを作成しています。 基本的には、デバイスが十分な数の新しいAndroidバージョンを実行しているかどうかを一度判定し、それに応じて実装を切り替えます。それはこれに沸く:古いバージョンと新しいAndroidバージョンで異なるAPIを実装する方法を処理するにはどうすればよいですか?
private static final int SDK_VERSION = Build.VERSION.SDK_INT;
private boolean isSdkVersionGreaterThanOrEqualTo(final int sdk) {
return SDK_VERSION >= sdk;
}
if (marshmallowOrNewer) { //isSdkVersionGreaterThanOrEqualTo(23);
try {
cameraManager.setTorchMode(cameraManager.getCameraIdList()[0], true);
} catch (final CameraAccessException e) {
e.printStackTrace();
}
} else {
cameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(cameraParameters);
camera.startPreview();
}
ジンジャーブレッド上で動作している時に私は近い力を得る:致命的な例外:この行の主な にjava.lang.VerifyError :
toggleButton.setOnClickListener(new View.OnClickListener() {
OnClickListenerを開きますこれは上記のコードを含んでおり、このバージョンのAndroidではAPIメソッドがサポートされていないことを示していますが、実際にはここでは呼び出さないのです。この状況を適切に処理し、Androidバージョンごとに異なるAPIを実装するにはどうすればよいのですか?またはこの問題を回避するにはどうすればよいですか?
スタックトレース:
04-02 13:42:54.413 3815-3815/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.VerifyError: t.t.t.MainActivity$1
at t.t.t.MainActivity.onCreate(MainActivity.java:61)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
at android.app.ActivityThread.access$1500(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
スタックトレースを送信してください。 – CommonsWare
stacktraceを追加しました。 –
あなたの問題はメソッドを呼び出すことではありません。AFAIK、それは 't.t.t.MainActivity $ 1'のいくつかのインターフェースまたはスーパークラスにあります。 't.t.t.MainActivity $ 1'は' View.OnClickListener() 'ですか?近くに他の匿名のインナークラスがありますか? 'View.OnClickListener'はAPIレベル1以降であり、' VerifyError'のソースではないようです。 – CommonsWare