Posts Tagged ‘Android’
Android wifi机器人视频传输接收端的实现
星期三, 五月 8th, 2013 1,414 views本篇的开发基于已将S605摄像头挂载在Openwrt系统上,并且已通过网页测试访问 http://192.168.1.1:8080/?action=snapshot 摄像头视频数据流成功的基础上。
上述过程的实现,大家可以自行在论坛里查找相关资料。本篇重点讲述如何通过Android手机端实现网页端相同的视频接收功能。
首先我们需要了解到这是一个MJPEG图片视频流,是以发送逐帧的JPEG图片数据连贯起来的动画视频。Android端通过访问目标Openwrt系统上的指定服务器端口,获取这个图片流数据,并逐帧播放出来。了解此原理之后,我们的工作即可简化为在Android端创建一个socket长连接,并对目标服务器端口发送请求,并接受请求。因为数据的传输都是以字节流的形式的,所以基本传输原理与常用的socket传输方式无基本差别,主要在用字节流的解析过程,将其还原成JPEG格式的信号。
在Android的中对于视频的显示处理通常使用surfaceView这个类,继承该类实现一个自定义的surfaceView组件即可。
surfaceView有两种创建方式,一种是在Activity中正常New出来,另一种是在UI设计界面下拖拽出一个surfaceView控件,并在xml中强制转换为自定义的surfaceView类型。
下面说下这两种方式的实现区别与用途,第一种通常用于整个界面的跳转,并且new出来的surfaceView是不受UI设计界面控制的,因此无法控制其图层的顺序,并且与其他Layout控件并存等等。实现方式是直接new即可,在我们自定义的VideoSurfaceView类里,使用第一个构造函数:
1 2 3 4 |
Android触摸事件及触摸屏滑动在游戏视角中的应用
星期二, 四月 23rd, 2013 131 viewsAndroid触摸事件是建立于Ontuch事件相应机制上的,首先我们需要为Activity窗体添加一个OnTouchListener,实现OnTouchListener接口即可
1 2 3 4 5 6 7 8 9 10 11 | public class MainActivity extends Activity implements OnTouchListener { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); button.setOnTouchListener(this); } } |
Android 主线程、子线程间的通信问题
星期日, 四月 14th, 2013 928 views在Android中,子线程是不可以操作UI界面的,必须在主线程中操作,同时在主线程中也不能使用网络通信,必须在子线程中使用(4.0版本后的新特性)。所以Android中关于线程间的通信便显得相当重要。
这里需要使用Looper和Handler,利用Message进行基于消息队列的线程通信,简单介绍一下几个对象
Looper:管理当前线程的消息队列。
Handler: 向目标线程发送消息Handler.sendMessage(Message msg),处理消息队列中的消息Handler.handleMessage(Message msg);
Message:线程之间传递信息的载体,包含了对消息的描述和任意的数据对象。
(更多…)
Android Socket TCP客户端简单实例
星期三, 四月 10th, 2013 1,566 views声明:本篇代码仅可用于android 4.0以下版本,4.0以后的版本中网络连接的代码不可在主线程运行。解决方法见后续几篇博客。
由于Android中可以使用java.io.*包和java.net.*包,所以此Demo的逻辑代码和JAVA版本的client没有区别,主要区别还是在于UI和一些接口函数上。
我们抛开UI从最基础的说起。
①建立连接:
先来看建立连接的核心代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SocketAddress socketAddress = new InetSocketAddress("192.168.0.1", 2001); Socket socket = new Socket(); try { socket.connect(socketAddress,5000); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } ...... } |