2013.07.05——— android LocalSocket
参考:
http://www.cnblogs.com/bastard/archive/2012/10/09/2717052.html
http://www.cnblogs.com/over140/archive/2011/11/22/2258372.html
package com.example.testlocalsocket;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
public static String SOCKET_ADDRESS = "123456Video";
private final Handler handler = new Handler();
public class NotificationRunnable implements Runnable {
private String message = null;
public void run() {
if (message != null && message.length() > 0) {
showNotification(message);
}
}
/**
* @param message the message to set
*/
public void setMessage(String message) {
this.message = message;
}
}
// post this to the Handler when the background thread notifies
private final NotificationRunnable notificationRunnable = new NotificationRunnable();
public void showNotification(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
class SocketListener extends Thread {
private Handler handler = null;
private NotificationRunnable runnable = null;
public SocketListener(Handler handler, NotificationRunnable runnable) {
this.handler = handler;
this.runnable = runnable;
this.handler.post(this.runnable);
}
/**
* Show UI notification.
* @param message
*/
private void showMessage(String message) {
this.runnable.setMessage(message);
this.handler.post(this.runnable);
}
@Override
public void run() {
//showMessage("DEMO: SocketListener started!");
try {
LocalServerSocket server = new LocalServerSocket(SOCKET_ADDRESS);
while (true) {
LocalSocket receiver = server.accept();
if (receiver != null) {
InputStream input = receiver.getInputStream();
// simply for java.util.ArrayList
int readed = input.read();
int size = 0;
int capacity = 0;
byte[] bytes = new byte[capacity];
// reading
while (readed != -1) {
// java.util.ArrayList.Add(E e);
capacity = (capacity * 3)/2 + 1;
//bytes = Arrays.copyOf(bytes, capacity);
byte[] copy = new byte[capacity];
System.arraycopy(bytes, 0, copy, 0, bytes.length);
bytes = copy;
bytes[size++] = (byte)readed;
// read next byte
readed = input.read();
}
showMessage(new String(bytes, 0, size));
}
}
} catch (IOException e) {
Log.e(getClass().getName(), e.getMessage());
}
}
}
public static void writeSocket(String message) throws IOException {
LocalSocket sender = new LocalSocket();
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
sender.getOutputStream().write(message.getBytes());
sender.getOutputStream().close();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new SocketListener(this.handler, this.notificationRunnable).start();
Button send1 = (Button)findViewById(R.id.send);
send1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
writeSocket("hello");
} catch (IOException e) {
Log.e(getClass().getName(), e.getMessage());
}
}
});
}
}
分享到:
相关推荐
在某些特定场景下,如设备内部组件间的通信或同一设备上的应用间通信,使用常规的网络套接字(Socket)可能并不合适,这时Android提供了LocalSocket(本地套接字)作为解决方案。`socket_test.zip`包含了针对Android...
Android利用LocalSocket实现Java端进程与C端进程之间的IPC
在Android系统中,`LocalSocketImpl` 是 `LocalSocket` 类的一个内部实现,用于处理本地域(即在同一设备上)进程间通信(IPC)。这种通信方式通常比基于网络的套接字更快、更安全,因为它不需要网络协议栈。 `...
在Android平台上,MediaRecorder是一个非常重要的类,用于处理多媒体数据的录制,如音频和视频。在本场景中,我们关注的是如何使用MediaRecorder录制视频并将其通过Socket发送到其他设备或服务器。以下是对这一主题...
LocalSocket(也称作套接字对)是Android中进程间通信的一种方式。在音视频录制场景下,通过LocalSocket将录制的音视频流实时传输到服务端,可以实现流媒体录制。具体步骤如下: 1. 创建LocalServerSocket和...
摘要中提到的问题是,在Android系统中,通常使用MediaRecorder和LocalSocket类来从MPEG4文件中提取H.264原始数据。然而,这种方法存在两个主要缺陷:一是需要手动填充SPS(Sequence Parameter Set)和PPS(Picture ...
C++编写的服务器端跟android上编写的手机客户端进行socket通信,传动多种数据。用VC6.0直接打开C++ Server,用eclipse直接打开android socketTest。注意修改一下安卓代码中的IP地址。程序中java和C++的通信的内容...
2. **通过Android的MediaRecorder,在SetoutputFile函数中绑定LocalSocket实现**: - **原理**:利用`MediaRecorder`的输出功能,将其输出绑定到`LocalSocket`上,这样可以通过Socket实时传输视频流。 - **优点**...
QT库是跨平台的C++应用开发框架,广泛用于创建桌面和移动应用程序。在QT中,`QLocalSocket`是一个非常实用的类,用于实现本地(在同一台机器上)进程间的通信。`QLocalSocket`提供了基于命名管道的通信机制,这种...
1. **LocalSocket的创建**:RIL层通过LocalSocket与上层应用通信,该Socket的名称为“rild”。其创建过程是在ril.cpp文件中实现的,使用`android_get_control_socket(SOCKET_NAME_RIL)`获取。 2. **RILD的工作流程*...
在Android平台上,MediaRecorder是一个非常重要的类,它用于处理多媒体数据的录制,涵盖了音频、视频以及图像等。本文将深入探讨如何使用MediaRecorder进行录音和播放操作,通过源码解析来帮助开发者理解其实现原理...
RIL层是Android系统中与硬件通信的重要桥梁,它通过LocalSocket与上层应用交互。在RIL层,消息处理的关键在于将消息通过名为`rild`的有名端口发送。这一端口的创建实现在`ril.cpp`文件中,通过`android_get_control_...
此外,Android提供了`LocalSocket`和`LocalServerSocket`用于设备内部的进程间通信(IPC),这与传统的Socket通信有所不同,适用于不涉及网络的数据交换。 总结来说,Android中的Socket通信涉及到网络编程的基础...
在Android平台上实现实时监控涉及到多个关键技术环节,包括视频采集、编码、传输、解码和播放。下面我们将逐一探讨这些步骤。 一、实时监控系统概述 Android实时监控系统主要是利用手机的摄像头进行视频采集,通过...
在Android系统中,APN(Access Point Name)是设置数据连接的关键,用于定义手机如何连接到互联网。本文将深入分析Android APN的开发流程,特别是数据连接的建立过程。 首先,Android的数据连接基于PPP(Point-to-...
在Java编程环境中,`LocalServerSocket`和`LocalSocket`是用于本地进程间通信(IPC,Inter-Process Communication)的类,主要适用于在同一台计算机上运行的多个Java应用程序之间的通信。这两个类是Java套接字API的...
1,开启 LocalSocket 和PC连接。 相应 PC 端传递过来的操作。 2,源源不断的将屏幕画面输出到PC,使用Mediacodec 编码。 PC 通过ffmpeg 解码播放。 3,使用 adb 来提高 scrcpy-server.jar 的运行权限
`LocalSocket` 是Android提供的一种本地进程间通信(IPC)机制,用于在同一台设备上的不同应用之间进行通信。在获取H264数据时,我们可能不希望直接将数据写入文件,而是通过 `LocalSocket` 实现数据传输,这样可以...
Hardcoder 是一个开源的安卓应用程序与系统间通信框架,它旨在突破传统 Android 应用只能通过系统标准 API 调用资源的限制,允许APP直接调度系统底层硬件资源,如CPU频率、GPU频率等,以实现更高效能的优化。...