0

私は次のコードを書きました。問題なくコンパイルされますが、問題は写真が撮れないことです。Android ドキュメントの指示に従ってマニフェスト ファイルにアクセス許可と機能を追加しましたが、何らかの理由でアプリが写真を撮っていません。I am not getting any errors in logcat either.これがコードです。

public class StartingPoint extends Activity implements SurfaceHolder.Callback{

Camera cam;
Parameters param;
Bitmap imageTaken;

ImageView imView;

SurfaceView dummySurfaceView;

SurfaceHolder dummyHolder;

CamCallBack camCall ;

private static final String TAG = "CameraApp";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_starting_point);

    imView = (ImageView) findViewById(R.id.imageView);

    dummySurfaceView = (SurfaceView) findViewById(R.id.dummySurface);


    dummyHolder= dummySurfaceView.getHolder(); 

    dummyHolder.addCallback(StartingPoint.this); 
    dummyHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {

    param= cam.getParameters();

    cam.setParameters(param);

    cam.startPreview();

    cam.takePicture(null, null, camCall);

}
@Override
public void surfaceCreated(SurfaceHolder holder) {

    try
    {           
        if(cam.getNumberOfCameras()==2)
        {       
            cam.open(0);

            cam.setPreviewDisplay(dummySurfaceView.getHolder());

            camCall = new CamCallBack();

            Log.d(TAG,"Try to open camera");
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();

        Log.d(TAG,"camera opening failed");

        Log.e(TAG,"recieved Exception",e);
    }


}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

    cam.stopPreview();      
    cam.release(); 

    cam=null;
}


public class CamCallBack implements Camera.PictureCallback
{

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        imageTaken = BitmapFactory.decodeByteArray(data, 0, data.length); 
        imView.setImageBitmap(imageTaken);

        cam.release();


        Log.d(TAG,"Picture taken");
    }

}


 }

私は何を間違っていますか?不足しているものはありますか?

編集:

を使用して写真を撮ることができることは知っていますCamera activityが、それは私のアプリでは必要ないため、使用しませんでした。


アップデート:

コードが更新されました。高さと幅が 0 dp のダミーの Surfaceview をレイアウトに追加しましたが、それでもアプリは動作しません。

写真が撮られたことをユーザーに知らせずに、サービスから写真を撮ることはできますか?

よろしく

4

2 に答える 2

0

カメラ アクティビティを使用して写真を撮れることはわかっていますが、アプリでは必要ないため、使用しませんでした。

Intent状況下では、ベースのソリューションを使用することをお勧めします。

不足しているものはありますか?

  • プレビュー ペインがありません
  • で画像サイズを指定していませんCamera.Parameters
  • で画像の種類 (JPEG など) を指定していません。Camera.Parameters

私は何を間違っていますか?

上記に加えて、 をCamera2 回開いており、2 回目は無視しています。削除することをお勧めしますcam.open(0)

于 2013-06-13T20:33:25.903 に答える
0

Intent を使用して簡単に試すことができると思います:

// at the beginning of your class
private static final int CAMERA_REQUEST = 1888; 

//call cam request
public void takePic(){
    Intent cameraIntent = new       Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
}
//get photo taken
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CAMERA_REQUEST){
                    ImageView photo = (ImageView) findViewById(R.id.yourpic);
        Bitmap photoprise = (Bitmap) data.getExtras().get("data"); 
        photo.setImageBitmap(photoprise);
    }

}

この助けを願っています

于 2013-06-13T20:20:02.473 に答える