2016-09-22 6 views
0

カメラをスクリーンに表示せずにフロントカメラから撮影するにはどうすればいいですか? 私はサービスクラスサービス中のカメラから写真を撮る

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

と主な活動を持っています。主な活動から電話したい

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) { 
    } 
} 

答えて

0

あなたは、このようなサービス利用SurfaceTextureの代わりSurfaceHolderとしてバックグラウンドスレッドです。私が背景ビデオストリームとUIビデオストリームの両方を実装している実装here is a opensource appを探しているなら。

+0

私はカメラを表示せずにフロントカメラから画像をキャプチャしたいだけです。 –

+0

同様のケースでは、提供されたリンクからアイデアを得るかもしれません。 –

関連する問題