AndroidでJava反射メカニズムを利用してシステムカメラオブジェクトを取得
4928 ワード
JAVA反射機構は運転状態において、いずれのクラスに対しても、このクラスのすべての属性と方法を知ることができる.いずれのオブジェクトに対しても、そのメソッドとプロパティを呼び出すことができます.このような動的に取得された情報および動的にオブジェクトを呼び出す方法の機能をjava言語の反射メカニズムと呼ぶ.
反射を使用できる前提は、仮想マシンに反射するクラスがロードされていることであり、符号化時の静的参照に対して、反射はプログラム実行時に動的に呼び出される.
このような定義と分類の下でJavaは動的言語ではないが、reflectionという非常に際立った動的関連メカニズムを持っている.この字の意味は「反射、映像、バックシャドウ」で、Javaでは実行時にコンパイル中に全く未知のclassesをロード、探知、使用することができます.つまり、Javaプログラムは、実行時に名前がわかるclassをロードすることができます.その完全な構造(methods定義は含まないが)を知り、そのオブジェクトエンティティを生成したり、fieldsに値を設定したり、methodsを喚起したりする.このような「classを見抜く」能力(the ability of the program to examine itself)はintrospection(内省、内観、反省)と呼ばれている.Reflectionとintrospectionはよく並列に提案される2つの用語である.
反射に関連するパッケージ名java.lang.Class、java.lang.reflect
反射を使用できる前提は、仮想マシンに反射するクラスがロードされていることであり、符号化時の静的参照に対して、反射はプログラム実行時に動的に呼び出される.
このような定義と分類の下でJavaは動的言語ではないが、reflectionという非常に際立った動的関連メカニズムを持っている.この字の意味は「反射、映像、バックシャドウ」で、Javaでは実行時にコンパイル中に全く未知のclassesをロード、探知、使用することができます.つまり、Javaプログラムは、実行時に名前がわかるclassをロードすることができます.その完全な構造(methods定義は含まないが)を知り、そのオブジェクトエンティティを生成したり、fieldsに値を設定したり、methodsを喚起したりする.このような「classを見抜く」能力(the ability of the program to examine itself)はintrospection(内省、内観、反省)と呼ばれている.Reflectionとintrospectionはよく並列に提案される2つの用語である.
反射に関連するパッケージ名java.lang.Class、java.lang.reflect
if (Build.VERSION.SDK_INT > 10) {
try {
Class<?> clsCamera = Camera.class;
Method staticMethodOpen = clsCamera
.getMethod("open", int.class);
mCamera = (Camera) staticMethodOpen.invoke(clsCamera, 0);
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else {
try {
if (mCamera == null)
mCamera = Camera.open();
} catch (Exception e) {
return;
}
}
if (mCamera == null) {
return;
}
Parameters parameters = mCamera.getParameters();
List<Camera.Size> previewSize = parameters.getSupportedPreviewSizes();
Camera.Size previewSizes = previewSize.get(0);
parameters.setPreviewSize(previewSizes.width, previewSizes.height);
parameters.setPreviewFrameRate(5);
List<Camera.Size> pictureSize = parameters.getSupportedPictureSizes();
Camera.Size pictureSizes = pictureSize.get(0);
parameters.setPictureSize(pictureSizes.width, pictureSizes.height);
mCamera.setParameters(parameters);
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
}
if (Build.VERSION.SDK_INT > 10) {
try {
Class<?> clsCamera = Camera.class;
Method staticMethodOpen = clsCamera.getMethod("open",
int.class);
mCamera = (Camera) staticMethodOpen.invoke(clsCamera, 0);
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else {
try {
if (mCamera == null)
mCamera = Camera.open();
} catch (Exception e) {
return;
}
}
if (mCamera == null) {
return;
}
Parameters parameters = mCamera.getParameters();
List<Camera.Size> previewSize = parameters
.getSupportedPreviewSizes();
Camera.Size previewSizes = previewSize.get(0);
parameters.setPreviewSize(previewSizes.width, previewSizes.height);
parameters.setPreviewFrameRate(5);
List<Camera.Size> pictureSize = parameters
.getSupportedPictureSizes();
Camera.Size pictureSizes = pictureSize.get(0);
parameters.setPictureSize(pictureSizes.width, pictureSizes.height);
mCamera.setParameters(parameters);
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
}