/ /カメラのライブフィードをアクティビティの背景として使用する方法は? - アンドロイド、背景、カメラ、サーフェイスビュー、ライブ壁紙

アクティビティの背景としてカメラのライブフィードを使用するには? - アンドロイド、背景、カメラ、サーフェイスビュー、ライブ壁紙

私はカメラのライブフィードをバックグラウンドとして使用する必要のあるアプリケーションを作成しようとしています。 (私はその愚かなことを知っているが、そのクライアントの需要を助けることはできない)。

私はそれを使ってやってみました SurfaceView これまでのところ成功していません。

これまでスタックオーバーフローで見つかったものはどれもより多くの推測や指示がありますが、リアルタイムの例やコードヘルプはありません。スタックオーバーフローのユーザーと私のようなコードを共有する前にこれを行った誰かがあれば素晴らしいだろう。

回答:

回答№1は5

ここを見てください:

http://developer.android.com/guide/topics/media/camera.html

カメラのプレビューを表示するアクティビティを作るために必要なすべてのコードがあります。


回答№2については2
package com.example.CameraPreview;

import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.io.IOException;

public class CameraView extends SurfaceView implements SurfaceHolder.Callback {

private SurfaceHolder mHolder;
private Camera mCamera;

public CameraView(Context context) {
super(context);
if(checkCameraHardware(context))  {
mCamera = getCameraInstance();
}
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public CameraView(Context context, AttributeSet attrs) {
super(context, attrs);

if(checkCameraHardware(context))  {
mCamera = getCameraInstance();
}
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
// The Surface has been created, now tell the camera where to draw the preview.
try {
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
} catch (IOException e) {
Log.d("CameraView", "Error setting camera preview: " + e.getMessage());
}
}

@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {

if (mHolder.getSurface() == null){
return;
}

try {
mCamera.stopPreview();
} catch (Exception e){

}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();

} catch (Exception e){
Log.d("CameraView", "Error starting camera preview: " + e.getMessage());
}
}

@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

}

private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
return true;
} else {
return false;
}
}

public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e){
}
return c;
}

}