android手机wifi热点通信代码,android手机wifi热点通信

该博客展示了如何在Android应用中实现WiFi热点的开启、关闭、扫描网络以及连接到指定网络的功能。通过反射调用`WifiManager`的相关方法,实现AP状态的设置和查询,同时获取并显示扫描到的网络列表。
摘要由CSDN通过智能技术生成

import java.io.BufferedReader;

import java.io.FileReader;

import java.lang.reflect.*;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.net.wifi.ScanResult;

import android.net.wifi.WifiConfiguration;

import android.net.wifi.WifiManager;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

public class AdHocActivity extends Activity {

private final String TAG = "WifiSoftAP";

public static final String WIFI_AP_STATE_CHANGED_ACTION =

"android.net.wifi.WIFI_AP_STATE_CHANGED";

public static final int WIFI_AP_STATE_DISABLING = 0;

public static final int WIFI_AP_STATE_DISABLED = 1;

public static final int WIFI_AP_STATE_ENABLING = 2;

public static final int WIFI_AP_STATE_ENABLED = 3;

public static final int WIFI_AP_STATE_FAILED = 4;

TextView result;

WifiManager wifiManager;

WifiReceiver receiverWifi;

List wifiList;

private List wifiConfiguration;

StringBuilder resultList = new StringBuilder();

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

result = (TextView) findViewById(R.id.result);

wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

Button btnOpenAP = (Button)this.findViewById(R.id.btnOpenAP);

btnOpenAP.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

if (!isApEnabled()){

setWifiApEnabled(true);

}

}

});

Button btnCloseAP = (Button)this.findViewById(R.id.btnCloseAP);

btnCloseAP.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

if (isApEnabled()){

setWifiApEnabled(false);

}

}

});

Button btnScan = (Button)this.findViewById(R.id.btnScan);

btnScan.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

if (!wifiManager.isWifiEnabled()) {

wifiManager.setWifiEnabled(true);

}

StartScan();

}

});

Button btnConnectAP = (Button)this.findViewById(R.id.btnConnectAP);

btnConnectAP.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

connectAP();

}

});

Button btnGetConnectedIP = (Button)this.findViewById(R.id.btnGetConnectedIP);

btnGetConnectedIP.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

ArrayList connectedIP = getConnectedIP();

resultList = new StringBuilder();

for(String ip : connectedIP){

resultList.append(ip);

resultList.append("\n");

}

result.setText(resultList);

}

});

}

protected void onPause() {

if (receiverWifi != null)

unregisterReceiver(receiverWifi);

super.onPause();

}

protected void onResume() {

if (receiverWifi != null)

registerReceiver(receiverWifi, new IntentFilter(

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

super.onResume();

}

public void StartScan() {

wifiManager.setWifiEnabled(true);

receiverWifi = new WifiReceiver();

registerReceiver(receiverWifi, new IntentFilter(

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

wifiManager.startScan();

result.setText("\nScaning...\n");

}

public boolean setWifiApEnabled(boolean enabled) {

if (enabled) { // disable WiFi in any case

wifiManager.setWifiEnabled(false);

}

try {

WifiConfiguration apConfig = new WifiConfiguration();

apConfig.SSID = "GossipDog";

apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

apConfig.preSharedKey = "abcdefgh";

Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);

return (Boolean) method.invoke(wifiManager, apConfig, enabled);

} catch (Exception e) {

Log.e(TAG, "Cannot set WiFi AP state", e);

return false;

}

}

public int getWifiApState() {

try {

Method method = wifiManager.getClass().getMethod("getWifiApState");

return (Integer) method.invoke(wifiManager);

} catch (Exception e) {

Log.e(TAG, "Cannot get WiFi AP state", e);

return WIFI_AP_STATE_FAILED;

}

}

public boolean isApEnabled() {

int state = getWifiApState();

return WIFI_AP_STATE_ENABLING == state || WIFI_AP_STATE_ENABLED == state;

}

public void connectAP() {

WifiConfiguration gossipDog = new WifiConfiguration();

for (WifiConfiguration ap : wifiConfiguration) {

if (ap.SSID == "GossipDog") {

gossipDog = ap;

}

}

if (gossipDog != null) {

gossipDog.preSharedKey = "abcdefgh";

gossipDog.networkId = wifiManager.addNetwork(gossipDog);

wifiManager.enableNetwork(gossipDog.networkId, true);

result.setText("连接");

}

}

private ArrayList getConnectedIP() {

ArrayList connectedIP = new ArrayList();

try {

BufferedReader br = new BufferedReader(new FileReader("/proc/net/arp"));

String line;

while ((line = br.readLine()) != null) {

String[] splitted = line.split(" +");

if (splitted != null && splitted.length >= 4) {

String ip = splitted[0];

connectedIP.add(ip);

}

}

} catch (Exception e) {

e.printStackTrace();

}

return connectedIP;

}

class WifiReceiver extends BroadcastReceiver {

public void onReceive(Context c, Intent intent) {

resultList = new StringBuilder();

wifiList = wifiManager.getScanResults();

for (int i = 0; i < wifiList.size(); i++) {

resultList.append(new Integer(i + 1).toString() + ".");

resultList.append((wifiList.get(i)).toString());

resultList.append("\n\n");

}

result.setText(resultList);

wifiConfiguration = wifiManager.getConfiguredNetworks();

}

}

}

下面是xml文件 <?xml version="1.0" encoding="utf-8"?>

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/btnOpenAP"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="开启AP"

/>

android:id="@+id/btnCloseAP"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="关闭AP"

/>

android:id="@+id/btnScan"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="扫描网络"

/>

android:id="@+id/btnConnectAP"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="配对"

/>

android:id="@+id/btnGetConnectedIP"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="查看已连接设备IP"

/>

android:id="@+id/result"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""

android:gravity="center"

/>

要实现两台Android手机之间的WiFi热点通信,可以使用Android提供的Socket API和WifiManager API。 以下是基本步骤: 1. 创建WiFi热点 在一个手机上打开WiFi热点。您可以通过使用WifiManager类中的setWifiApEnabled()方法来创建WiFi热点。例如: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "MyWifiHotspot"; wifiConfig.preSharedKey = "password"; wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); Method setWifiApMethod = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); setWifiApMethod.invoke(wifiManager, wifiConfig, true); ``` 2. 连接到WiFi热点 在另一个手机上连接到WiFi热点。您可以使用WifiManager类中的addNetwork()、enableNetwork()和reconnect()方法来连接到WiFi热点。例如: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "MyWifiHotspot"; wifiConfig.preSharedKey = "password"; wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); int networkId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(networkId, true); wifiManager.reconnect(); ``` 3. 创建Socket连接 使用Socket API在两个手机之间创建Socket连接。在一个手机上作为服务器,另一个手机作为客户端。例如: 在服务器端: ``` ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); ``` 在客户端: ``` Socket socket = new Socket(serverIpAddress, 8888); ``` 4. 通过Socket传输数据 在Socket连接建立后,可以使用输入流和输出流来传输数据。在服务器端和客户端都需要使用输入流和输出流。例如: 在服务器端: ``` DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF("Hello from server"); dataOutputStream.flush(); DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String message = dataInputStream.readUTF(); ``` 在客户端: ``` DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF("Hello from client"); dataOutputStream.flush(); DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String message = dataInputStream.readUTF(); ``` 以上就是Android两台手机之间通过WiFi热点通信的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值