android 创建热点

二话不说,直接上代码解决。

1.WifiApAdmin.java

package com.example.wifierdian;

import java.lang.reflect.InvocationTargetException;  
import java.lang.reflect.Method;  
  
import android.content.Context;  
import android.net.wifi.WifiConfiguration;  
import android.net.wifi.WifiManager;  
import android.util.Log;  
  
/** 
 * 创建热点 
 * 
 */  
public class WifiApAdmin {  
    public static final String TAG = "WifiApAdmin";  
      
    public void closeWifiAp(Context context) {  
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);   
        closeWifiAp(wifiManager);  
    }  
      
    private WifiManager mWifiManager = null;  
      
    private Context mContext = null;  
    public WifiApAdmin(Context context) {  
        mContext = context;  
          
        mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);    
          
        closeWifiAp(mWifiManager);  
    }  
      
    private String mSSID = "";  
    private String mPasswd = "";  
    public void startWifiAp(String ssid, String passwd) {  
        mSSID = ssid;  
        mPasswd = passwd;  
          
        if (mWifiManager.isWifiEnabled()) {  
            mWifiManager.setWifiEnabled(false);  
        }   
          
        stratWifiAp();  
          
        MyTimerCheck timerCheck = new MyTimerCheck() {  
              
            @Override  
            public void doTimerCheckWork() {  
                // TODO Auto-generated method stub  
                  
                if (isWifiApEnabled(mWifiManager)) {  
                    Log.v(TAG, "Wifi enabled success!");  
                    this.exit();  
                } else {  
                    Log.v(TAG, "Wifi enabled failed!");  
                }  
            }  
  
            @Override  
            public void doTimeOutWork() {  
                // TODO Auto-generated method stub  
                this.exit();  
            }  
        };  
        timerCheck.start(15, 1000);  
          
    }  
  
    public void stratWifiAp() {  
        Method method1 = null;  
        try {  
            method1 = mWifiManager.getClass().getMethod("setWifiApEnabled",  
                    WifiConfiguration.class, boolean.class);  
            WifiConfiguration netConfig = new WifiConfiguration();  
  
            netConfig.SSID = mSSID;  
            netConfig.preSharedKey = mPasswd;  
  
            netConfig.allowedAuthAlgorithms  
                    .set(WifiConfiguration.AuthAlgorithm.OPEN);  
            netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);  
            netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);  
            netConfig.allowedKeyManagement  
                    .set(WifiConfiguration.KeyMgmt.WPA_PSK);  
            netConfig.allowedPairwiseCiphers  
                    .set(WifiConfiguration.PairwiseCipher.CCMP);  
            netConfig.allowedPairwiseCiphers  
                    .set(WifiConfiguration.PairwiseCipher.TKIP);  
            netConfig.allowedGroupCiphers  
                    .set(WifiConfiguration.GroupCipher.CCMP);  
            netConfig.allowedGroupCiphers  
                    .set(WifiConfiguration.GroupCipher.TKIP);  
  
            method1.invoke(mWifiManager, netConfig, true);  
  
        } catch (IllegalArgumentException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IllegalAccessException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (InvocationTargetException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (SecurityException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (NoSuchMethodException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
  
    private static void closeWifiAp(WifiManager wifiManager) {  
        if (isWifiApEnabled(wifiManager)) {  
            try {  
                Method method = wifiManager.getClass().getMethod("getWifiApConfiguration");  
                method.setAccessible(true);  
  
                WifiConfiguration config = (WifiConfiguration) method.invoke(wifiManager);  
  
                Method method2 = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);  
                method2.invoke(wifiManager, config, false);  
            } catch (NoSuchMethodException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (IllegalArgumentException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (IllegalAccessException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (InvocationTargetException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
    }  
  
    private static boolean isWifiApEnabled(WifiManager wifiManager) {  
        try {  
            Method method = wifiManager.getClass().getMethod("isWifiApEnabled");  
            method.setAccessible(true);  
            return (Boolean) method.invoke(wifiManager);  
  
        } catch (NoSuchMethodException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
  
        return false;  
    }  
  
}  
2.MyTimerCheck.java

package com.example.wifierdian;

public abstract class MyTimerCheck {  
    private int mCount = 0;  
    private int mTimeOutCount = 1;  
    private int mSleepTime = 1000; // 1s  
    private boolean mExitFlag = false;  
    private Thread mThread = null;  
      
    /** 
     * Do not process UI work in this. 
     */  
    public abstract void doTimerCheckWork();  
      
    public abstract void doTimeOutWork();  
      
    public MyTimerCheck() {  
        mThread = new Thread(new Runnable() {  
              
            @SuppressWarnings("static-access")
			@Override  
            public void run() {  
                // TODO Auto-generated method stub  
                while (!mExitFlag) {  
                    mCount++;  
                    if (mCount < mTimeOutCount) {  
                        doTimerCheckWork();  
                        try {  
                            mThread.sleep(mSleepTime);  
                        } catch (InterruptedException e) {  
                            // TODO Auto-generated catch block  
                            e.printStackTrace();  
                            exit();  
                        }  
                    } else {  
                        doTimeOutWork();  
                    }  
                }  
            }  
        });  
    }  
      
    /** 
     * start 
     * @param times  How many times will check? 
     * @param sleepTime ms, Every check sleep time. 
     */  
    public void start(int timeOutCount, int sleepTime) {  
        mTimeOutCount = timeOutCount;  
        mSleepTime = sleepTime;  
          
        mThread.start();  
    }  
      
    public void exit() {  
        mExitFlag = true;  
    }  
      
}  

3.上两步加入后,这里可以开始运用了。

	private Button open;
	private Context mContext = null;  
	String HotSpot_name;
	String keys;
	TextView textv;
	Button close;
	 public static final String TAG = "MainActivity"; 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		HotSpot_name = "hotspotbyandroid";//热点名称
		keys = "1234567890";//热点密码
		mContext = this; 
		open=(Button)findViewById(R.id.open_hotspot);
		close=(Button)findViewById(R.id.close_hotspot);
		textv = (TextView)findViewById(R.id.textv);
		final WifiApAdmin wifiAp = new WifiApAdmin(mContext);  
		open.setText("点击创建热点");
		open.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {
	            wifiAp.startWifiAp(HotSpot_name, keys); //启动热点
	            textv.setText("HotSpot_name:"+HotSpot_name+"\nkeys:"+keys);
			}
		});
		close.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			wifiAp.closeWifiAp(mContext);//关闭热点
			textv.setText("已关闭热点");
			}
		});
	}

4.最后还有个重点,权限

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android设备上创建WiFi热点需要使用`WifiManager`和`ConnectivityManager`类。以下是创建WiFi热点的代码示例: ``` WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiManager.setWifiEnabled(false); ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); Method method = connectivityManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = "MyWiFiHotspot"; // 热点名称 wifiConfiguration.preSharedKey = "password"; // 热点密码 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); method.invoke(connectivityManager, wifiConfiguration, true); ``` 其中,`WifiManager`用于关闭设备的WiFi,因为设备只能作为热点或连接到WiFi网络,不能同时进行。`ConnectivityManager`用于开启热点,通过反射调用`setWifiApEnabled()`方法实现。 在`WifiConfiguration`对象中定义热点名称和密码,并设置热点管理类型为WPA_PSK。最后,调用`method.invoke()`方法开启热点。 需要注意的是,Android 6.0及以上版本的设备需要在运行时请求`android.permission.ACCESS_COARSE_LOCATION`权限才能开启热点。可以使用以下代码请求权限: ``` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE_LOCATION_PERMISSION); } ``` 其中,`REQUEST_CODE_LOCATION_PERMISSION`是自定义的权限请求代码,用于在`onRequestPermissionsResult()`方法中处理请求结果。 希望这个代码示例能帮助到你创建Android设备上的WiFi热点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值