2013-06-13 2 views
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"); 
    } 

} 


} 

Что я делаю неправильно? Есть что-то, чего я не вижу?

EDIT:

Я знаю, что может делать снимки с помощью Camera activity, но это не требуется в моем приложении, так что я не использовал его.


UPDATE:

код обновляется. Я добавил фиктивный Surfaceview в макете с высотой и шириной 0dp, но все же приложение не работает.

Можно ли сделать снимок из службы, не сообщив пользователю, что фотография была сделана?

С уважением

ответ

0

Я думаю, вы можете попробовать в легкий путь, используя Намерение:

// 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); 
    } 

} 

Надежда эта помощь

+0

Я не хочу запускать деятельность камеры. В моем приложении активность камеры не требуется, поэтому я ее не использовал. – Naruto

+0

Хорошо, жаль, что я французский, и я не понимаю, что вы хотите сделать ... – Angudroid

0

Я знаю, что могу делать снимки с помощью активности камеры, но это не требуется в моем приложении, поэтому я не использовал его.

Использование решения на основе Intent было бы хорошей идеей при данных обстоятельствах.

Есть ли что-нибудь, что мне не хватает?

  • У вас нет панели предварительного просмотра
  • Вы не указали размер изображения через Camera.Parameters
  • Вы не указали тип изображения (например, JPEG) через Camera.Parameters

Что я делаю неправильно?

Помимо вышеизложенного, вы открываете Camera дважды, и не обращая внимания на второй - вы можете удалить cam.open(0).

+0

ok. Даже если я не хочу показывать снимок, сделанный пользователю, я должен использовать панель предварительного просмотра. и я хочу сделать снимок с помощью фронтальной камеры – Naruto

Смежные вопросы