我是Android开发的新蜜蜂,我正在计划在两个或更多Android设备(如三星Duos或更高版本)之间的聊天应用,而不使用互联网。并且只使用WIFI。 1)有可能吗? 如果是,那么请建议一些代码段或链接,用于通过WiFi建立2个设备之间的连接,并在它们之间传输文本消息。
答案 0 :(得分:0)
您必须使用聊天功能为两台设备创建相同的APP。
在AndroidManifest.xml中放置:
非常有用<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
然后在MainActivity类和其他传输数据的类中,放置它是必不可少的:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
这段代码使设备能够从连接在同一WiFi网络上的外部设备发送和接收数据。
好的,那么你将不得不创建套接字。套接字允许您从特定的IP和端口发送和接收数据。 你有一个非常简单的例子:
Socket client = new Socket("1.2.3.4", 2000); // This will connect to the other device
OutputStream out = client.getOutputStream(); //This will let you send data.
InputStream in = client.getInputStream(); //This will let you receive data.
现在,如果您可以发送和接收,我在这里已经解决了一个常见的问题...
如果您想知道朋友是否向您发送了数据,该怎么办?
您需要创建 BufferedReader :
iBuff = new BufferedReader(new InputStreamReader(client.getInputStream()));
然后您就可以知道缓冲区中是否有数据:
while (iBuff.ready()) { //While there's data in buffer
in.read(bytes, 0, 1); //Read
}
如果您尝试使用空缓冲区读取,它将被阻止。对于input.available()也是如此,因为要知道数据是否可用,需要阅读,并且你会遇到同样的问题。
你有一些提示,我花了很多时间试图解决它:)我希望它能帮助你。
PD:对不起我的英语,我是西班牙人^^&#39;