参考: 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()); } } }); } }