安卓 socket通信 远程调用摄像头拍照
通过socket通信,在电脑端控制手机拍照,并将照片发回电脑端,今早买了 google ioio(好贵)和小车底座,等ioio和底座到了,就可以组合起来了,将手机安放在小车上,通过ioio控制小车运动,远程调用相机拍照并返回照片,想想应该挺好玩的。
今天花了一下午时间先试着写了一下远程调用摄像头拍照的程序
手机端:
package com.zyf.video;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;
import android.content.Context;
public class MainActivity extends Activity {
SurfaceView video_sv;
Button start_bt;
Camera camera;
SurfaceHolder surfaceHolder;
boolean isPreview;
ServerSocket ser_socket;
Socket cli_socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video_sv = (SurfaceView) findViewById(R.id.video_sv);
start_bt = (Button) findViewById(R.id.start_bt);
surfaceHolder=video_sv.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(new Callback(){
public void surfaceCreated(SurfaceHolder holder) {
camera=Camera.open();
// WindowManager wm=(WindowManager)getSystemService(Context.WINDOW_SERVICE);
// Display display=wm.getDefaultDisplay();
// Parameters para=camera.getParameters();
// para.setPreviewFormat(PixelFormat.JPEG);
// para.setPreviewFrameRate(3);
// para.setPictureSize(display.getWidth(),display.getHeight());
// para.setJpegQuality(80);
// camera.setParameters(para);
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
isPreview=true;
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null)
{
if(isPreview)
{
camera.stopPreview();
camera.release();
}
}
}
});
}
public void startSocket(View v)
{
ServerThread st=new ServerThread();
st.start();
}
class ServerThread extends Thread
{
public void run()
{
try {
ser_socket=new ServerSocket(6000);
} catch (IOException e) {
e.printStackTrace();
}
while (true)
{
try {
cli_socket = ser_socket.accept();
Log.e("接受连接","accept");
BufferedReader in = new BufferedReader(new InputStreamReader(cli_socket.getInputStream()));
String str ="";
String temp;
while((temp=in.readLine())!=null)
{
str=str+temp;
Log.e("收到数据",temp);
if(temp.equals("发送数据"))
{
takePic();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
cli_socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
public void takePic() {
ShutterCallback mShutterCallback = new ShutterCallback()
}
}
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args){
Thread serverThread = new Thread(new Server());
serverThread.start();
try {
Socket so=new Socket("192.168.43.233",6000);
PrintStream output = new PrintStream(so.getOutputStream(), true, "utf-8");
output.print("发送数据");
output.flush();
so.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server implements Runnable{
public void run() {
try {
//创建ServerSocket
ServerSocket serverSocket = new ServerSocket(6001);
while (true) {
//接受客户端请求
Socket client = serverSocket.accept();
System.out.println("accept");
try {
//接收客户端消息
//BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//String str = in.readLine();
//System.out.println("read:" + str);
//向服务器发送消息
//PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);
//out.println("server message");
//关闭流
//out.close();
//in.close();
InputStream is=client.getInputStream();
int bytesRead = 0;
byte[] buffer=new byte[1024];
File f=new File("C:\\Users\\Administrator\\Desktop\\m.jpg");
OutputStream fos=new FileOutputStream(f);
while((bytesRead=is.read(buffer,0,1024))!=-1)
{
fos.write(buffer,0,bytesRead);
System.out.println(new String(buffer));
}
fos.close();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
//关闭
client.close();
System.out.println("close");
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}