2016-09-22 2 views
0

Wie kann Bild von der vorderen Kamera in Betrieb genommen werden, ohne die Kamera auf dem Bildschirm zu zeigen. Ich habe Dienstklassenehmen Sie ein Foto von der Kamera in Betrieb

public class PhotoTakingService extends Service { 
    //Camera variables 
    //a surface holder 
    private SurfaceHolder sHolder; 
    //a variable to control the camera 
    private Camera mCamera; 
    //the camera parameters 
    private Parameters parameters; 

    boolean mPreviewRunning = false; 


    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate() { 
     super.onCreate(); 

    } 

    @Override 
    public void onStart(Intent intent,int startId) { 
     // TODO Auto-generated method stub 
     super.onStart(intent,startId); 



     mCamera = Camera.open(); 
     SurfaceView sv = new SurfaceView(getBaseContext()); 


     try { 

      Camera.Parameters p = mCamera.getParameters(); 
      mCamera.setParameters(p); 
      mCamera.startPreview(); 

      mCamera.takePicture(null,null,mPictureCallback); 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     //Get a surface 
     sHolder = sv.getHolder(); 
     //tells Android that this surface will have its data constantly replaced 
     sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 


    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { 
     public void onPictureTaken(byte[] imageData,Camera c) { 
      Log.e("Callback TAG","Here in jpeg Callback"); 

      if (imageData != null) { 
       FileOutputStream outputStream = null; 
       try { 
        outputStream = new FileOutputStream("/sdcard/car_final/Image.jpg"); 
        outputStream.write(imageData); 

        // Removed the finish call you had here 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        if (outputStream != null) try { 
         outputStream.close(); 
        } catch (IOException ex) { 
         // TODO Auto-generated catch block 
         ex.printStackTrace(); 
        } 
       } 

      } 
     } 
    }; 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

und Haupttätigkeit. Ich möchte von der Hauptaktivität aus anrufen.

public class MainActivity extends Activity implements SurfaceHolder.Callback { 



private static final String TAG = MainActivity.class.getSimpleName(); 

    public static SurfaceView mSurfaceView; 
    public static SurfaceHolder mSurfaceHolder; 
    public static Camera mCamera; 
    public static boolean mPreviewRunning; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView); 
     mSurfaceHolder = mSurfaceView.getHolder(); 
     mSurfaceHolder.addCallback(this); 
     mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     Button btnStart = (Button) findViewById(R.id.button1); 
     btnStart.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       Intent intent = new Intent(MainActivity.this, PhotoTakingService.class); 
       //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startService(intent); 

      } 
     }); 

     /* Button btnStop = (Button) findViewById(R.id.StopService); 
     btnStop.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       stopService(new Intent(CameraRecorder.this, RecorderService.class)); 
      } 
     });*/ 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 

    } 

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

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
    } 
} 

Antwort

0

Wenn Sie sich im Hintergrund-Thread wie Service Gebrauch SurfaceTexture statt SurfaceHolder. Wenn Sie nach Implementierung here is a opensource app suchen, wo ich Hintergrundvideostream und UI-Videostream beides implementiert habe.

+0

Ich möchte nur Bild von Frontkamera .. ohne Kamera zu erfassen. –

+0

Ähnliche Fälle können Sie die Idee von dem angegebenen Link erhalten. –

Verwandte Themen