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"
/>