从来好事天生俭,自古瓜儿苦后甜。这篇文章主要讲述android 通过wifi 热点实现手机摄像头数据共享(转)相关的知识,希望能为你提供帮助。
原网址:
http://www.cnblogs.com/pengqinping/archive/2012/09/07/2674952.html
最近一直在在学习通过两个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中显示我们手机的预览的画面。
【android 通过wifi 热点实现手机摄像头数据共享(转)】 代码如下:
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中Context详解
- Android studio自动删除没用的资源
- Android性能优化之启动加速35%
- 调用 android 系统拍照结合 android-crop 裁剪图片
- android 类似QQ底部输入框弹出键盘和面板冲突 布局闪动处理方案(转)
- VirtualBox中安装Android-x86详解
- android开发学习——day3
- Android版本和API Level的对应关系
- Android基础知识-1