android手机wifi热点通信

来源:互联网 发布:网络优化每天做什么 编辑:程序博客网 时间:2024/04/30 03:44
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<ScanResult> wifiList;
    private List<WifiConfiguration> 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<String> 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<String> getConnectedIP() {
        ArrayList<String> connectedIP = new ArrayList<String>();
        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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
    <Button
        android:id="@+id/btnOpenAP"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="开启AP"
    />
    
    <Button
        android:id="@+id/btnCloseAP"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="关闭AP"
    />
    
    <Button
        android:id="@+id/btnScan"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="扫描网络"
    />
    
    
    <Button
        android:id="@+id/btnConnectAP"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="配对"
    />
    
    
    <Button
        android:id="@+id/btnGetConnectedIP"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="查看已连接设备IP"
    />
    
    
    <TextView  
        android:id="@+id/result"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:gravity="center"
    />
        
</LinearLayout>


原创粉丝点击