android代码设置、打开WLAN wifi热点及热点的连接

其实创建热点很简单,先获取到wifi的服务,再配置热点名称、密码等等,然后再通过反射打开它就OK了。

下面我们看看创建热点的代码实现:

这一段是开启WLAN热点,并可以指定好它的热点名和密码

支行后,这一段程序可以开启WLAN和同时自动关闭WIFI。

package com.tel.lajoin.wifi.hotspot;

import java.lang.reflect.Method;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class HotspotActivity extends Activity {
	private WifiManager wifiManager;
	private Button open;
	private boolean flag=false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//获取wifi管理服务
		wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
		open=(Button)findViewById(R.id.open_hotspot);
		//通过按钮事件设置热点
		open.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				//如果是打开状态就关闭,如果是关闭就打开
				flag=!flag;
				setWifiApEnabled(flag);
			}
		});
	}

	// wifi热点开关
	public boolean setWifiApEnabled(boolean enabled) {
		if (enabled) { // disable WiFi in any case
			//wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
			wifiManager.setWifiEnabled(false);
		}
		try {
			//热点的配置类
			WifiConfiguration apConfig = new WifiConfiguration();
			//配置热点的名称(可以在名字后面加点随机数什么的)
			apConfig.SSID = "YRCCONNECTION";
			//配置热点的密码
			apConfig.preSharedKey="12122112";
     			//通过反射调用设置热点
			Method method = wifiManager.getClass().getMethod(
					"setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
			//返回热点打开状态
			return (Boolean) method.invoke(wifiManager, apConfig, enabled);
		} catch (Exception e) {
			return false;
		}
	}
}

 

下在一段是,去连一个WLAN热点

package com.tel.lajoin.wifiscan;

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;

public class MainActivity extends Activity {
	private List<ScanResult> wifiList;
	private WifiManager wifiManager;
	private List<String> passableHotsPot;
	private WifiReceiver wifiReceiver;
	private boolean isConnected=false;
	private Button connect;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		init();
	}

	/* 初始化参数 */
	public void init() {
		setContentView(R.layout.main);
		connect=(Button)findViewById(R.id.connect);
		wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
		wifiReceiver = new WifiReceiver();
		//通过按钮事件搜索热点
		connect.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				wifiManager.startScan();
			}
		});
	}

	/* 监听热点变化 */
	private final class WifiReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			wifiList = wifiManager.getScanResults();
			if (wifiList == null || wifiList.size() == 0 || isConnected)
				return;
			onReceiveNewNetworks(wifiList);
		}
	}

	/*当搜索到新的wifi热点时判断该热点是否符合规格*/
	public void onReceiveNewNetworks(List<ScanResult> wifiList){
		passableHotsPot=new ArrayList<String>();
		for(ScanResult result:wifiList){
			System.out.println(result.SSID);
			if((result.SSID).contains("YRCCONNECTION"))
				passableHotsPot.add(result.SSID);
		}
		synchronized (this) {
			connectToHotpot();
		}
	}

	/*连接到热点*/
	public void connectToHotpot(){
		if(passableHotsPot==null || passableHotsPot.size()==0)
			return;
		WifiConfiguration wifiConfig=this.setWifiParams(passableHotsPot.get(0));
		int wcgID = wifiManager.addNetwork(wifiConfig);
	    boolean flag=wifiManager.enableNetwork(wcgID, true);
	    isConnected=flag;
		System.out.println("connect success? "+flag);
	}

	/*设置要连接的热点的参数*/
	public WifiConfiguration setWifiParams(String ssid){
		WifiConfiguration apConfig=new WifiConfiguration();
		apConfig.SSID="\""+ssid+"\"";
		apConfig.preSharedKey="\"12122112\"";
		apConfig.hiddenSSID = true;
		apConfig.status = WifiConfiguration.Status.ENABLED;
		apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
		apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
		apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
		apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
		apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
		apConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
		return apConfig;
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		/*销毁时注销广播*/
		unregisterReceiver(wifiReceiver);
	}
}

 

当然,如果要运行起来,还要在MANIFEST.XML中设定好定义的ACTIVITY类。以及相应的LAYOUT文件和R文件的生成。

还有配置权限。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>"
	<!-- 设置允许改变配置信息的权??-->
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />  

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

  

时间: 2024-08-14 02:29:21

android代码设置、打开WLAN wifi热点及热点的连接的相关文章

android代码设置EditText只输入数字、字母

 如何设置EditText,使得只能输入数字或者某些字母呢? 一.设置EditText,只输入数字: 方法1:直接生成DigitsKeyListener对象就可以了. et_1.setKeyListener(new DigitsKeyListener(false,true)); 方法2:在EditText中设置属性,android:numeric="integer"即只能输入整数,如下 android:singleLine="true" android:nume

android 代码设置、打开wifi热点及热点的连接(转)

用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输.快牙传输速度惊人应该跟它的这种机制有关系吧.不知道它的搜索机制是怎样的,但我想应该可以通过热点的名字来进行判断吧.下面我们就来探讨一下如何自动创建一个wifi热点吧 创建wifi热点首先需要手机支持,建议开发的哥们整个好点的手机,我们公司那些个山寨设备,几近有一半是不支持热点的:其实创建热点很简单,先获取到wifi的服务,再配置热点名称.密码等等,然后再通过反射打开它就OK了. 下面我

android 代码设置图片间距

<pre class="java" name="code">java代码中如下设置间距 </pre> <pre></pre> <pre class="java" name="code">ImageView image1 = new ImageView(DetailActivity.this); LinearLayout.LayoutParams layout = ne

Android 代码设置Activity 背景透明

当指定Activity 样式 Them.Dialog 时候 又不同意用XML 设置 Activity 的背景颜色的时候 用代码 this.getWindow().getDecorView().setBackgroundColor(Color.TRANSPARENT); 主意:代码写在 setContView();方法的后面.

android代码设置RelativeLayout的高度

今天做项目碰到一个问题,在代码中设置RelativeLayout的高度,百度一圈,发现好多方法不太好使,最后找到了方法代码如下: private RelativeLayout relative; relative = (RelativeLayout) findViewById(R.id.rlay_1); ViewGroup.LayoutParams params=relative.getLayoutParams(); params.height =180; mrlay.setLayoutPara

android 代码设置progressBar 颜色

void test() { LinearLayout linearLayout = new LinearLayout(this); ProgressBar progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); setColors(progressBar, 0xff0000FF, //bgColor blue 0xffFF0000 //progressColor red ); pr

Android 代码设置RelativeLayout元素居中

[java] view plain copy RelativeLayout relativeLayout= new RelativeLayout(this); [java] view plain copy RelativeLayout.LayoutParams rlp=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);

Android 解决通过自定义设置打开热点后手机搜索不到热点的问题。

开发过程中出现了通过自定义设置打开热点后手机搜索不到热点的问题. 后来通过观看  /data/misc/wifi  目录下的  hostapd.conf  文件,发现是 interface=ap0 driver=nl80211 ctrl_interface=/data/misc/wifi/hostapd ssid=Anffff channel=6 ieee80211n=1 hw_mode=g ignore_broadcast_ssid=1 wowlan_triggers=any max_num_

Android 打开设置界面或者WiFi连接界面

1.使用APP打开系统的设置界面或者WiFi连接界面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网络设置界面 } startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS )); //直接进入手机中设置界面 }