wifi 变热点 在开发板是FriendlyARM tiny6410, 系统是android2.3.4。
我下面的代码是下载的,地址忘记了,这个可以在android手机上使用,但在友善之臂上运行时,激活不了AP.请大侠们指点一二。在友善之臂上运行时点击激活时AP状态是2(正在激活……)但之后没有变成3(已经激活),而是变成4(失败)。
在线等待ingpackage com.vr.wifiap.demo;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.*;
import java.util.ArrayList;
import java.util.List;import android.R.string;
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.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;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;
List<ScanResult> wifiList;
StringBuilder resultList = new StringBuilder(); public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //setTitle("");
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()){
if(setWifiApEnabled(true)){
if(isApEnabled()){
Toast.makeText(AdHocActivity.this, "开启热点成功", 1).show();
}else{
Toast.makeText(AdHocActivity.this, "开启热点失败", 1).show();
}

}
}
         }
        });


Button btnCloseAP = (Button)this.findViewById(R.id.btnCloseAP);
btnCloseAP.setOnClickListener(new OnClickListener() {            
public void onClick(View v) {
if (isApEnabled()){
if(setWifiApEnabled(false)){
Toast.makeText(AdHocActivity.this, "热点关闭", 1).show();
}
}
         }
        });


Button btnGetConnectedIP = (Button)this.findViewById(R.id.btnGetConnectedIP);
btnGetConnectedIP.setOnClickListener(new OnClickListener() {            
public void onClick(View v) {
if(isApEnabled()){
Toast.makeText(AdHocActivity.this, "热点Ok", 0).show();
}else{
Toast.makeText(AdHocActivity.this, "热点Fail", 0).show();
}

Toast.makeText(AdHocActivity.this, "ap状态:"+getWifiApState(), 1).show();

ArrayList<String> connectedMac = getConnectedMAC();
resultList = new StringBuilder();
for(String mac : connectedMac){
resultList.append(mac);
resultList.append("\n");
}
result.setText(resultList);

         }
        });

new Thread(){
public void run() {
while(true){
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("ap状态:", getWifiApState()+"");
}

}
}.start();

}

 public boolean hasRootPermission() {
        boolean rooted = true;
        try {
            File su = new File("/system/bin/su");
            if (su.exists() == false) {
                su = new File("/system/xbin/su");
                if (su.exists() == false) {
                    rooted = false;
                }
            }
        } catch (Exception e) {
            Log.d("root权限", "Can't obtain root - Here is what I know: "+e.getMessage());
            rooted = false;
        }
        return rooted;
    }

public boolean setWifiApEnabled(boolean enabled) {
if (enabled) { // disable WiFi in any case
wifiManager.setWifiEnabled(false);
}
try {
WifiConfiguration apConfig = new WifiConfiguration();
apConfig.SSID = "friendlyArm";
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
apConfig.preSharedKey = "abcdefgh";
Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
boolean open = (Boolean) method.invoke(wifiManager, apConfig, enabled);
System.out.println(getWifiApState());
return open;
} catch (Exception e) {
Log.e(TAG, "Cannot set WiFi AP state", e);
return false;
}
}
public int getWifiApState() {
try {
Method method = wifiManager.getClass().getMethod("getWifiApState");
int i = (Integer) method.invoke(wifiManager);
System.out.println("****"+i);
return i;
} catch (Exception e) {
Log.i(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;
}
    
    
    private ArrayList<String> getConnectedMAC() {
        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(" +");
                Log.i("信息", line);
                if (splitted != null && splitted.length >= 4) {
                    String ip = splitted[0];
                    String mac = splitted[3];
                    connectedIP.add(mac);
                }
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return connectedIP;
    }
 
}
权限什么都添加了。