android打开wifi
1. android怎么打开wifi
安卓如果想要打开WiFi的话,在手机设置当中,点击WiFi就能够打开WiFi。
2. android 怎么开启wifi
手机设置--wlan--开启--扫描--输入密码--连接--显示连接上就可以使用了。
3. android怎么开启wifi热点
需要的工具原料:Android手机
在Android手机中打开手机系统设置,进入”手机系统设置窗口”
5.设置完成
注意事项:建议在安全性选择WPA2 PSK
4. Android-WiFi详解
WiFi是一种无线联网技术,常见的是使用无线路由器。那么在这个信号覆盖的范围内都可以采用WiFi连接的方式进行联网。如果无线路由器连接了一个ADSL线路或者其他的联网线路,则又被称为“热点”。
在Android中对WiFi操作,Android本身提供一些有用的包,在anroid.net.wifi包下面。
是一种特殊的 Ad-hoc LAN (一种支持点对点访问的无线网络应用模式)的应用,一个无线网络至少由一个连接到有线网络的AP和若干无线工作站组成,这种配置称为一个基本服务装置。一群计算机设定相同的
BSS名称,即可自成一个group,而此BSS名称,即所谓BSSID。通常,手机WLAN中,bssid其实就是无线路由的MAC地址。
网络ID。
无线网络的安全认证模式。
SSID(Service Set Identif)用于标识无线局域网,SSID不同的无线网络是无法进行互访的。
wifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,MAC地址,网络ID,信号强度等信息。这里简单介绍一下这里的方法:
用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用,获取WiFi网卡状态。
WIFI网卡的状态是由一系列的整形常量来表示的。
WiFi需求申请权限,在AndroidManifest.xml文件中填写。
1.打开WiFi
2.扫描WiFi信号
3.得到扫描WIFI结果
4.根据WIFI的名称SSID判定指定WIFI是否已经配置好,配置好则返回其networkId,用于连接。之前尝试了BSSID地址没成功,所以只能使用SSID
5.如果需要连接的WIFI没有配置好,即没有保存密码。则为指定名称ssid的WIFI添加密码信息psw,添加成功后返回给其分配的networId,同于连接
6.根据步骤6配置好需要连接的WIFI密码信息后,下面通过networkId连接指定WIFI。在连接经过步骤6刚添加配置信息的WIFI信号之前需要重新执行下步骤4,得到新的配置好信息的列表。
5. Android 怎样默认打开便携式WIFI热点 M
目前判断Wifi开机后是否需要的自动开启实现是在wifiService.java的checkAndStartWifi() 函数里,类似的,可以参照wifi在wifiService.java里添加一下如下函数:
public void checkAndStartSoftAp() {
mWifiStateMachine.autoConnectInit();
boolean isAirplaneModeOn = isAirplaneModeOn();
int persistedWifiState = getPersistedWifiState();
SXlog.d(TAG, isAirplaneModeOn: + isAirplaneModeOn + , getPersistedWifiState: + persistedWifiState);
mAirplaneModeOn.set(isAirplaneModeOn);
mPersistWifiState.set(persistedWifiState);
if (mWifiStateMachine.hasCustomizedAutoConnect() && mAirplaneModeOn.get()) { //AirplaneMode下不打开SoftAp,客户也可以看情况不限制
SXlog.i(TAG, Don't enable softAp when airplane mode is on for customization.);
} else {
Slog.i(TAG, WifiService starting up with softAp);
setWifiApEnabled(null, true);
} } 然后,在systemServer.java里搜索wifi.checkAndStartWifi(), 可以找见它在ServerThread的run里,将wifi.checkAndStartWifi()替换成wifi.checkAndStartSoftAp(),然后,编译测试。
6. android adb shell 中怎么开启wifi 热点
前提是有安装wpa supplicant ,步骤如下:
adb shell
svc wifi enable 打开无线网络服务 用ps|grep wifi 查看wpa_supplicant是不是已经起来了。
wpa_cli
scan 扫描无线网络
scan_results 按信号顺序显示扫描到的无线网络
list_networks
select_network [network id] 选择网络
enable_network [network id]
password 配置网络的密码
ping 应该会成功
netcfg 查看本机的网络参数
df 查看手机空间
解决方法如下:
adb shell
su
然后
第一步:加载驱动
insmod /lib/moles/dhd.ko "firmware_path=/system/etc/wifi/bcmdhd_apsta.bin nvram_path=/system/etc/wifi/nvram_net.txt iface_name=wlan0"
第二步:
netcfg wlan0 up
第三步:
ndc softap startap
以上方法虽然可以打开,但是firmware_path=/system/etc/wifi/bcmdhd_apsta.bin是无法找到的,并且
firmware_path=/system/etc/wifi/bcmdhd_apsta.bin_b2这个文件是无法打开softap的
7. Android中怎么打开Wifi的组播功能
打开Android中Wifi的组播功能。主要有以下几个步骤:
在Manifest文件中加入:android.permission.CHANGE_WIFI_MULTICAST_STATE,这个权限
获取到MulticastLock对象,这个对象不能直接实例化,要通过WifiManager间接得到,工厂模式
调用MulticastLock对象的acquire方法,获取到组播锁
相应的,用完组播,为了不浪费电力,要调用MulticastLock的release方法释放锁
下面写了个简单示例,通过组播发现服务器。
Activity写的比较简单
public class MulticastDemoActivity extends Activity {
MulticastLock multicastLock;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
allowMulticast();
try {
NetUtil.findServerIpAddress();
} catch (IOException e) {
throw new RuntimeException(e);
}
Log.d("multicast.demo", "find ip ok.");
multicastLock.release();
}
private void allowMulticast(){
WifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
multicastLock=wifiManager.createMulticastLock("multicast.test");
multicastLock.acquire();
}
}
在Activity中打开和释放组播锁。使用组播发送报文和接收ip地址信息的工具类代码:
public class NetUtil {
private static final String TAG="Net.Utils";
private static final int MULTICAST_PORT=5111;
private static final String GROUP_IP="224.5.0.7";
private static byte[] sendData;
static{
sendData=new byte[4];
// 0xEE78F1FB
sendData[3] = (byte) 0xEE;
sendData[2] = (byte) 0×78;
sendData[1] = (byte) 0xF1;
sendData[0] = (byte) 0xFB;
}
public static String findServerIpAddress() throws IOException{
String ip=null;
MulticastSocket multicastSocket=new MulticastSocket(MULTICAST_PORT);
multicastSocket.setLoopbackMode(true);
InetAddress group = InetAddress.getByName(GROUP_IP);
multicastSocket.joinGroup(group);
DatagramPacket packet=new DatagramPacket(sendData, sendData.length,group,MULTICAST_PORT);
for(;;){
multicastSocket.send(packet);
Log.d(TAG,">>>send packet ok");
byte[] receiveData=new byte[256];
packet=new DatagramPacket(receiveData, receiveData.length);
multicastSocket.receive(packet);
String packetIpAddress=packet.getAddress().toString();
packetIpAddress=packetIpAddress.substring(1, packetIpAddress.length());
Log.d(TAG,"packet ip address: "+packetIpAddress);
StringBuilder packetContent=new StringBuilder();
for(int i=0;i<receiveData.length;i++){
if(receiveData[i]==0){
break;
}
packetContent.append((char)receiveData[i]);
}
ip=packetContent.toString();
Log.d(TAG,"packet content ip is: "+ip);
if(ip.equals(packetIpAddress)){
Log.d(TAG,"find server ip address: "+ip);
break;
}else{
Log.d(TAG,"not find server ip address, continue …");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
return ip;
}
}
8. 【Android初级】android扫描WiFi列表的正确用法
最近有个需求,需要做一个扫描WiFi列表的功能,也在网上找了一些资料,但有些资料是有问题的,然后自己摸索了下,总结如下。
本地环境:
AS版本 3.0.1,DEMO APK 的 Min SDK Version 是 API 23,Target SDK Version 是 API 24,Compile SDK Version是 API 26,真机是Android 7.0
1、打开WiFi,并打开定位服务(在设置内找到定位服务-访问我的位置信息-开启)
2、在 onCreate 里面动态申请权限
String[] PERMS_INITIAL={Manifest.permission.ACCESS_FINE_LOCATION};
requestPermissions(PERMS_INITIAL,127);
3、在 onCreate 里面注册广播
IntentFilter filter =new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(mReceiver, filter);
4、定义 mReceiver
private BroadcastReceivermReceiver =new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
List results =wifiManager.getScanResults();
if (results !=null) {
Log.d(TAG,"results size: " + results.size());
}
}
}
};
5、在layout里面定义一个Button,点击后开始扫描
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
boolean scanResult =wifiManager.startScan(); // 最好检查下返回值,因为这个方法可能会调用失败
Log.d(TAG,"scanResult: " + scanResult);
6、在 AndroidManifest.xml 里面声明权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
有人可能会有疑问,为什么在 onCreate里面动态申请了权限 ACCESS_FINE_LOCATION,又在 Manifest 里面重复声明了一次
经过本地验证,去掉其中任意一个,都拿不到WiFi扫描结果,也就是 onReceive 方法不会被执行(有不同结论的请留言共同探讨)
7、错误用法
boolean scanResult =wifiManager.startScan();
List list =wifiManager.getScanResults();
调用 startScan 之后立马调用 getScanResults,这个时候拿到的WiFi列表是上一次的扫描结果,不是最新的,一定要在广播接收器里面获取扫描结果。