次のコードを使用して、Android Gingerbread 2.3以降のフロントカメラを使用して写真を撮ることができます:
package com.system.settings;
import java.io.File;
import java.io.FileOutputStream;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
public class FrontPhoto implements PictureCallback
{
private static Camera camera;
private final Context context;
public FrontPhoto(Context context)
{
this.context = context;
}
public void onPictureTaken(byte[] data, android.hardware.Camera camera)
{
File pictureFile = new File("/sdcard/FrontPhoto.jpg");
try
{
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
}
catch (Throwable t){}
}
public static void Take(Context ctx)
{
if (FrontCameraPresent(ctx) == true)
{
camera.takePicture(null, null, new FrontPhoto(ctx));
}
}
private static boolean FrontCameraPresent(Context ctx)
{
if (ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA))
{
boolean result = false;
int numOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numOfCameras; i++)
{
CameraInfo info = new CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == CameraInfo.CAMERA_FACING_FRONT)
{
camera = Camera.open(i);
result = true;
break;
}
}
}
return result;
}
}
しかし、このコードを 2.2 および 2.1 バージョンで使用できるようにしたいと考えています。これを行うために、プロジェクトに 2.3 ソースの Camera クラスを配置し、変更して実行しました。しかし、私はエラーが発生します
Can't find getNumberOfCameras native method.
このトピックに関するすべての回答をこのサイトで読みました。私もこのコードを試しましたが、エラーが発生し、一部のデバイスにのみ適しているため、これは普遍的な方法ではありません。
Camera.Parameters parameters = mCamera.getParameters();
parameters.set("camera-id", 2);
parameters.setPreviewSize(640, 480);
mCamera.setParameters(parameters);
私の質問は、古いバージョンとの互換性を確保する方法です。2.3 の Camera クラスで使用されるすべてのメソッドと、必要なすべてのネイティブ メソッドをプロジェクトに含める方法。