android 通过wifi 热点实现手机摄像头数据共享(转)
Posted 西伯利亚鹰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 通过wifi 热点实现手机摄像头数据共享(转)相关的知识,希望对你有一定的参考价值。
原网址:
最近一直在在学习通过两个android手机通过wifi共享摄像头的数据。弄了好久有了点头目。具体有下面几个步骤:
1.对手机相机的开发,自定义surfaceView来定义自己的相机类。主要是显示手机摄像头的画面。
2.对自定义相机的预览画面的数据的获取。然后对数据进行解析。
3.在两台Android手机通过wifi建立传输数据的连接。
4.将数据的时时的传输在两个手机之间。
一.自定义相机类很简单定义一个surfaceView,在Activity中,通过实现surfaceHodler.callBack接口重写的OnSurfaceCreate()中添加打开相机的camera.open即可获得一个Camera对象。设置Camera的预览对象。 mCamera.setPreviewDisplay(holder);holder是我们surfaceView的hodler。可以通过surfaceView.getHodler()获取。这样就可在surfaceView中显示我们手机的预览的画面。
代码如下:
package com.weipu.camera;
import java.io.IOException;
import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
/**
* 接口SurfaceHolder.Callback被用来接收摄像头预览界面变化的信息。它实现了三个方法: surfaceChanged
* 当预览界面的格式和大小发生改变时,该方法被调用。 surfaceCreated 初次实例化,预览界面被创建时,该方法被调用。
* surfaceDestroyed 当预览界面被关闭时,该方法被调用。
*
* @author pengqinping
*/
@TargetApi(9)
public class MyCameraActivity extends Activity implements
SurfaceHolder.Callback, OnClickListener
{
private SurfaceHolder mSurfaceHolder = null;
private SurfaceView mSurfaceView = null;
private Camera mCamera = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 初始化组件,SurfaceView
mSurfaceView = (SurfaceView) findViewById(R.id.SurfaceView01);
/**
* 通过代码,我们从surfaceview中获得了holder,并增加callback功能到“this”。
* 这意味着我们的操作(activity)将可以管理这个surfaceview。
*/
mSurfaceHolder = mSurfaceView.getHolder();// 获取surfaceView的Holder对象
mSurfaceHolder.addCallback(this);// 为surfaceView的holder对象添加回调函数,
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
protected void onStart()
{
super.onStart();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width1,
int height1)
{
if (mCamera == null)
{
System.out.println("没有相机设备");
return;
}
if (mCamera != null)
{
//初始化相机。设置参数
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(width1, height1); // 设置预览照片的大小
parameters.setPreviewFpsRange(20, 30); // 每秒显示20~30帧
parameters.setPictureFormat(ImageFormat.NV21); // 设置图片格式
parameters.setPictureSize(width1, height1); // 设置照片的大小
}
try
{
mCamera.setPreviewDisplay(holder);
}
catch (IOException e)
{
System.out.println("设置预览出错......");
}
// 通过SurfaceView显示取景画面
mCamera.startPreview(); // 开始预览
mCamera.autoFocus(null); // 自动对焦
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
try
{
mCamera = Camera.open();
}
catch (Exception e)
{
System.out.println("000000000");
return;
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
mCamera.stopPreview();
mCamera.release();
}
@Override
public void onClick(View v)
{
}
}
以上是关于android 通过wifi 热点实现手机摄像头数据共享(转)的主要内容,如果未能解决你的问题,请参考以下文章
android手机如何获取自己手机设置的wifi热点的bssid