1

このスクリプトを使用して、前面カメラを開きました。

private Camera openFrontFacingCameraGingerbread() {
int cameraCount = 0;
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
    Camera.getCameraInfo( camIdx, cameraInfo );
    if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        try {
            cam = Camera.open(camIdx);
        } catch (RuntimeException e) {
            Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
        }
    }
}

このスクリプトでは、すべてのデバイスでフロントカメラを選択して開く必要があると思います。しかし、私のデバイスでは、スクリプトは2台のカメラ(フロント+バックカメラ)を備えたデバイスでのみ正しく機能します。フロントカメラが1つある他のデバイスでは、空白の画面しか表示されません。フロントカメラ1台のみでカメラにアクセスすることに違いはありますか?

4

2 に答える 2

1

「前面カメラが 1 つある他のデバイスでは、空白の画面しか表示されません。」

「空白の画面のみを受信する」とは、カメラのプレビューからということですか? 呼び出してカメラを開いCamera.open(cameraId)ても、プレビュー画面が自動的に表示されるわけではありません。カメラ プレビューを開始する例については、このstartPreview()サンプル チュートリアルのメソッドを参照してください。

さらに、デバイスにハードウェアの問題がないことを確認してください (ストック カメラ アプリでテストしてコードを確認し、カメラ プレビューまたは別のデバイスで正常に開くかどうかを確認します)。

「しかし、私のデバイスでは、スクリプトは 2 つのカメラ (フロント カメラとバック カメラ) を備えたデバイスでのみ正しく機能します。」

camIdxとの値cameraCountは有効であり、意図したとおりです。したがって、正常に動作するはずです。デバイスに搭載されているカメラの総数に関係なく、質問で提供したコードはフロント カメラのみを開きます。コードの評価:

カメラが 1 台の場合:

cameraCount = Camera.getNumberOfCameras(); // cameraCount == 1
// in for loop
cam = Camera.open(camIdx); // camIdx == 0

カメラが 2 台ある場合:

cameraCount = Camera.getNumberOfCameras(); // cameraCount == 2
// ... more codes
// in for loop
cam = Camera.open(camIdx); // camIdx == 1

「フロントカメラが1つだけの場合、カメラへのアクセスに違いはありますか?」*

異なる仕様の異なるデバイスを扱う場合、Cameraオブジェクトとそれに関連付けられたメソッドの呼び出しに違いはありません。Android アプリケーションの開発に関する限り、必要なのはCamera.CameraInfo呼び出しによってオブジェクトを取得Camera.CameraInfo()し、必要に応じて関連するメソッドを呼び出すことだけです。

于 2013-03-14T23:14:21.293 に答える
0

この方法では、利用可能な最も前面のカメラが得られます。デバイスに背面カメラしかない場合は、背面カメラが表示されます。2つある場合は、前のものを取得します。前面に 1 つしかない場合は、次のようになります。

private Camera getCameraInstance() {
    Camera c = null;
    try {
        // get the front-est camera
        c = Camera.open(Camera.getNumberOfCameras() - 1);
    } catch (Exception e) {
        Log.d(TAG, "Couldn't get the camera");
    }
    return c;
}
于 2013-03-15T13:20:11.250 に答える