2015-09-24 51 views
1

我需要在安卓服務中用後置攝像頭拍照,但看完文檔之後好像需要一張SurfaceView是否可以拍照而不顯示任何內容?在安卓服務中用前置攝像頭拍照

編輯: 這項工作?

SurfaceTexture surfaceTexture = new SurfaceTexture(10); 
Camera camera = Camera.open(); 
camera.getParameters().setPreviewSize(1, 1); 
camera.setPreviewTexture(surfaceTexture); 
camera.startPreview(); 
camera.takePicture(null, pictureCallback, null); 

回答

0

您可以設置WidthSurfaceViewHeight1dpmargintop到 - 10,所以它不會顯示在屏幕上,但它的功能是正常和可以採取的圖片不顯示給用戶表面觀

<SurfaceView 
android:layout_width="1dp" 
android:layout_height="1dp" 
android:layout_marginTop="-10dp" 
... 
/> 
在這種情況下

你可以使用SurfaceTexture

SurfaceTexture surfaceTexture = new SurfaceTexture(10); 
    Camera camera = Camera.open(); 
    camera.getParameters().setPreviewSize(1, 1); 
    camera.setPreviewTexture(surfaceTexture); 
+0

一種黑客,但很酷;) –

+0

我沒有表面視圖。 – Emma22

+0

檢查一次 –

0

是的,這是可能的。打電話給你的相機回叫方法拍攝來自相機的圖片和不要指定預覽的大小,並開始預覽它將工作。

忽略此步驟:

param.setPreviewSize(122,133); 

,或者使用

param.setPreviewSize(1, 1); 
+0

我編輯我的文章將我的代碼工作? – Emma22

+0

希望它能正常工作。您是否嘗試過不使用此行setPreviewSize(1,1)? –

+0

試試這也是camera.getParameters(); camera.startPreview(); –

1

100%工作。使用服務從前置攝像頭點擊圖片。

public class MyService extends Service { 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     CapturePhoto(); 
    } 

    private void CapturePhoto() { 

     Log.d("kkkk","Preparing to take photo"); 
     Camera camera = null; 

     Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 

      int frontCamera = 1; 
      //int backCamera=0; 

      Camera.getCameraInfo(frontCamera, cameraInfo); 

      try { 
       camera = Camera.open(frontCamera); 
      } catch (RuntimeException e) { 
       Log.d("kkkk","Camera not available: " + 1); 
       camera = null; 
       //e.printStackTrace(); 
      } 
      try { 
       if (null == camera) { 
        Log.d("kkkk","Could not get camera instance"); 
       } else { 
        Log.d("kkkk","Got the camera, creating the dummy surface texture"); 
        try { 
         camera.setPreviewTexture(new SurfaceTexture(0)); 
         camera.startPreview(); 
        } catch (Exception e) { 
         Log.d("kkkk","Could not set the surface preview texture"); 
         e.printStackTrace(); 
        } 
        camera.takePicture(null, null, new Camera.PictureCallback() { 

         @Override 
         public void onPictureTaken(byte[] data, Camera camera) { 
          File pictureFileDir=new File("/sdcard/CaptureByService"); 

          if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) { 
           pictureFileDir.mkdirs(); 
          } 
          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss"); 
          String date = dateFormat.format(new Date()); 
          String photoFile = "ServiceClickedPic_" + "_" + date + ".jpg"; 
          String filename = pictureFileDir.getPath() + File.separator + photoFile; 
          File mainPicture = new File(filename); 

          try { 
           FileOutputStream fos = new FileOutputStream(mainPicture); 
           fos.write(data); 
           fos.close(); 
           Log.d("kkkk","image saved"); 
          } catch (Exception error) { 
           Log.d("kkkk","Image could not be saved"); 
          } 
          camera.release(); 
         } 
        }); 
       } 
      } catch (Exception e) { 
       camera.release(); 
      } 
    } 
} 
相關問題