在Android中对Wifi操作,android本身提供了一些实用的包。在android.net.wifi包以下。简介一下:


大致能够分为四个基本的类ScanResult,wifiConfiguration,WifiInfo,WifiManager


(1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。


(2)wifiConfiguration 在我们连通一个wifi 接入点的时候,须要获取到的一些信息。大家能够跟我们有线的设备进行对照一下。


(3)WifiInfo 在我们的wifi 已经连通了以后,能够通过这个类获得一些已经连通的wifi 连接的信息获取当前链接的信息。这里信息就比較简单了。这里简介一下这里的方法:


getBSSID() 获取BSSID


getDetailedStateOf() 获取client的连通性


getHiddenSSID() 获得SSID 是否被隐藏


getIpAddress() 获取IP 地址


getLinkSpeed() 获得连接的速度


getMacAddress() 获得Mac 地址


getRssi() 获得802.11n 网络的信号


getSSID() 获得SSID


getSupplicanState() 返回详细client状态的信息


(4)wifiManager 这个不用说。就是用来管理我们的wifi 连接,这里已经定义好了一些类,能够供我们使用。这里来说相对复杂,里面的内容比較多,可是通过字面意思。我们还是能够获得非常多相关的信息。这个类里面预先定义了很多常量。我们能够直接使用。不用再次创建。


介绍完了,開始写一个Demo吧。程序已启动效果图例如以下:



看代码。当中有凝视。我就不多说了。


布局文件代码:




  1. <?

    xml version="1.0" encoding="utf-8"?>


  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

  3. android:id="@+id/mScrollView" android:layout_width="fill_parent"

  4. android:layout_height="wrap_content" android:scrollbars="vertical">

  5. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  6. android:orientation="vertical"

  7. android:layout_width="fill_parent"

  8. android:layout_height="fill_parent"

  9. >

  10. <TextView

  11. android:id="@+id/allNetWork"

  12. android:layout_width="fill_parent"

  13. android:layout_height="wrap_content"

  14. android:text="当前没有扫描到Wifi网络"

  15. />

  16. <Button

  17. android:id="@+id/scan"

  18. android:layout_width="wrap_content"

  19. android:layout_height="wrap_content"

  20. android:text="扫描网络"

  21. />

  22. <Button

  23. android:id="@+id/start"

  24. android:layout_width="wrap_content"

  25. android:layout_height="wrap_content"

  26. android:text="打开Wifi"

  27. />

  28. <Button

  29. android:id="@+id/stop"

  30. android:layout_width="wrap_content"

  31. android:layout_height="wrap_content"

  32. android:text="关闭Wifi"

  33. />

  34. <Button

  35. android:id="@+id/check"

  36. android:layout_width="wrap_content"

  37. android:layout_height="wrap_content"

  38. android:text="Wifi状态"

  39. />

  40. </LinearLayout>

  41. </ScrollView>
<?

xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mScrollView" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:scrollbars="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/allNetWork"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="当前没有扫描到Wifi网络"
/>
<Button
android:id="@+id/scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="扫描网络"
/>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打开Wifi"
/>
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭Wifi"
/>
<Button
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wifi状态"
/>
</LinearLayout>
</ScrollView>

上面布局文件里的ScrollView用来在Activity中显示右側滚动栏,假设数据多的话,则能够往下滑动继续显示未显示完的数据。


主页面代码:




  1. package org.sunchao;
  2. import java.util.List;
  3. import android.app.Activity;

  4. import android.net.wifi.ScanResult;

  5. import android.os.Bundle;

  6. import android.view.View;

  7. import android.view.View.OnClickListener;

  8. import android.widget.Button;

  9. import android.widget.ScrollView;

  10. import android.widget.TextView;

  11. import android.widget.Toast;
  12. public class Main extends Activity implements OnClickListener {

  13. // 右側滚动栏button

  14. private ScrollView sView;

  15. private TextView allNetWork;

  16. private Button scan;

  17. private Button start;

  18. private Button stop;

  19. private Button check;

  20. private WifiAdmin mWifiAdmin;

  21. // 扫描结果列表

  22. private List<ScanResult> list;

  23. private ScanResult mScanResult;

  24. private StringBuffer mStringBuffer = new StringBuffer();
  25. /** Called when the activity is first created. */

  26. @Override

  27. public void onCreate(Bundle savedInstanceState) {

  28. super.onCreate(savedInstanceState);

  29. setContentView(R.layout.main);

  30. mWifiAdmin = new WifiAdmin(Main.this);

  31. init();

  32. }
  33. // button的初始化

  34. public void init() {

  35. sView = (ScrollView) findViewById(R.id.mScrollView);

  36. allNetWork = (TextView) findViewById(R.id.allNetWork);

  37. scan = (Button) findViewById(R.id.scan);

  38. start = (Button) findViewById(R.id.start);

  39. stop = (Button) findViewById(R.id.stop);

  40. check = (Button) findViewById(R.id.check);

  41. scan.setOnClickListener(Main.this);

  42. start.setOnClickListener(Main.this);

  43. stop.setOnClickListener(Main.this);

  44. check.setOnClickListener(Main.this);

  45. }
  46. // WIFI_STATE_DISABLING 0

  47. // WIFI_STATE_DISABLED 1

  48. // WIFI_STATE_ENABLING 2

  49. // WIFI_STATE_ENABLED 3

  50. public void start() {

  51. mWifiAdmin.openWifi();

  52. Toast.makeText(Main.this, "当前Wifi网卡状态为" + mWifiAdmin.checkState(),

  53. Toast.LENGTH_SHORT).show();

  54. }
  55. public void stop() {

  56. mWifiAdmin.closeWifi();

  57. Toast.makeText(Main.this, "当前Wifi网卡状态为" + mWifiAdmin.checkState(),

  58. Toast.LENGTH_SHORT).show();

  59. }
  60. public void check() {

  61. Toast.makeText(Main.this, "当前Wifi网卡状态为" + mWifiAdmin.checkState(),

  62. Toast.LENGTH_SHORT).show();

  63. }
  64. public void getAllNetWorkList() {

  65. // 每次点击扫描之前清空上一次的扫描结果

  66. if (mStringBuffer != null) {

  67. mStringBuffer = new StringBuffer();

  68. }
  69. // 開始扫描网络

  70. mWifiAdmin.startScan();

  71. list = mWifiAdmin.getWifiList();
  72. if (list != null) {

  73. for (int i = 0; i < list.size(); i++) {

  74. mScanResult = list.get(i);

  75. // 得到网络的SSID:the network name

  76. mStringBuffer = mStringBuffer

  77. .append(mScanResult.SSID).append("        ")

  78. .append(mScanResult.BSSID).append("        ")

  79. .append(mScanResult.capabilities).append("        ")

  80. .append(mScanResult.frequency).append("        ")

  81. .append(mScanResult.level).append("        ")

  82. .append("\n\n");

  83. }

  84. allNetWork.setText("扫描到的全部Wifi网络:\n" + mStringBuffer.toString());

  85. }

  86. }
  87. @Override

  88. public void onClick(View v) {

  89. switch (v.getId()) {

  90. case R.id.scan:

  91. getAllNetWorkList();

  92. break;

  93. case R.id.start:

  94. start();

  95. break;

  96. case R.id.stop:

  97. stop();

  98. break;

  99. case R.id.check:

  100. check();

  101. break;

  102. default:

  103. break;

  104. }

  105. }

  106. }
package org.sunchao;

import java.util.List;

import android.app.Activity;
import android.net.wifi.ScanResult;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity implements OnClickListener {
// 右側滚动栏button
private ScrollView sView;
private TextView allNetWork;
private Button scan;
private Button start;
private Button stop;
private Button check;
private WifiAdmin mWifiAdmin;
// 扫描结果列表
private List<ScanResult> list;
private ScanResult mScanResult;
private StringBuffer mStringBuffer = new StringBuffer();

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWifiAdmin = new WifiAdmin(Main.this);
init();
}

// button的初始化
public void init() {
sView = (ScrollView) findViewById(R.id.mScrollView);
allNetWork = (TextView) findViewById(R.id.allNetWork);
scan = (Button) findViewById(R.id.scan);
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
check = (Button) findViewById(R.id.check);
scan.setOnClickListener(Main.this);
start.setOnClickListener(Main.this);
stop.setOnClickListener(Main.this);
check.setOnClickListener(Main.this);
}

// WIFI_STATE_DISABLING 0
// WIFI_STATE_DISABLED 1
// WIFI_STATE_ENABLING 2
// WIFI_STATE_ENABLED 3
public void start() {
mWifiAdmin.openWifi();
Toast.makeText(Main.this, "当前Wifi网卡状态为" + mWifiAdmin.checkState(),
Toast.LENGTH_SHORT).show();
}

public void stop() {
mWifiAdmin.closeWifi();
Toast.makeText(Main.this, "当前Wifi网卡状态为" + mWifiAdmin.checkState(),
Toast.LENGTH_SHORT).show();
}

public void check() {
Toast.makeText(Main.this, "当前Wifi网卡状态为" + mWifiAdmin.checkState(),
Toast.LENGTH_SHORT).show();
}

public void getAllNetWorkList() {
// 每次点击扫描之前清空上一次的扫描结果
if (mStringBuffer != null) {
mStringBuffer = new StringBuffer();
}

// 開始扫描网络
mWifiAdmin.startScan();
list = mWifiAdmin.getWifiList();

if (list != null) {
for (int i = 0; i < list.size(); i++) {
mScanResult = list.get(i);
// 得到网络的SSID:the network name
mStringBuffer = mStringBuffer
.append(mScanResult.SSID).append(" ")
.append(mScanResult.BSSID).append(" ")
.append(mScanResult.capabilities).append(" ")
.append(mScanResult.frequency).append(" ")
.append(mScanResult.level).append(" ")
.append("\n\n");
}
allNetWork.setText("扫描到的全部Wifi网络:\n" + mStringBuffer.toString());
}
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.scan:
getAllNetWorkList();
break;
case R.id.start:
start();
break;
case R.id.stop:
stop();
break;
case R.id.check:
check();
break;
default:
break;
}
}
}

上面用到了一个WifiAdmin类,这是我自己写的一个类,用于对Wifi的操作进行一次封装。里面的方法非常多,我们本次Demo仅仅用到了当中几种。但我还是先所有放上去吧,以后会用到的。

WifiAdmin工具类代码:




  1. package org.sunchao;
  2. import java.util.List;
  3. import android.content.Context;

  4. import android.net.wifi.ScanResult;

  5. import android.net.wifi.WifiConfiguration;

  6. import android.net.wifi.WifiInfo;

  7. import android.net.wifi.WifiManager;

  8. import android.net.wifi.WifiManager.WifiLock;
  9. public class WifiAdmin {

  10. // 定义WifiManager对象

  11. private WifiManager mWifiManager;

  12. // 定义WifiInfo对象

  13. private WifiInfo mWifiInfo;

  14. // 扫描出的网络连接列表

  15. private List<ScanResult> mWifiList;

  16. // 网络连接列表

  17. private List<WifiConfiguration> mWifiConfiguration;

  18. // 定义一个WifiLock

  19. WifiLock mWifiLock;
  20. // 构造器

  21. public WifiAdmin(Context context) {

  22. // 取得WifiManager对象

  23. mWifiManager = (WifiManager) context

  24. .getSystemService(Context.WIFI_SERVICE);

  25. // 取得WifiInfo对象

  26. mWifiInfo = mWifiManager.getConnectionInfo();

  27. }
  28. // 打开WIFI

  29. public void openWifi() {

  30. if (!mWifiManager.isWifiEnabled()) {

  31. mWifiManager.setWifiEnabled(true);

  32. }

  33. }
  34. // 关闭WIFI

  35. public void closeWifi() {

  36. if (mWifiManager.isWifiEnabled()) {

  37. mWifiManager.setWifiEnabled(false);

  38. }

  39. }
  40. // 检查当前WIFI状态

  41. public int checkState() {

  42. return mWifiManager.getWifiState();

  43. }
  44. // 锁定WifiLock

  45. public void acquireWifiLock() {

  46. mWifiLock.acquire();

  47. }
  48. // 解锁WifiLock

  49. public void releaseWifiLock() {

  50. // 推断时候锁定

  51. if (mWifiLock.isHeld()) {

  52. mWifiLock.acquire();

  53. }

  54. }
  55. // 创建一个WifiLock

  56. public void creatWifiLock() {

  57. mWifiLock = mWifiManager.createWifiLock("Test");

  58. }
  59. // 得到配置好的网络

  60. public List<WifiConfiguration> getConfiguration() {

  61. return mWifiConfiguration;

  62. }
  63. // 指定配置好的网络进行连接

  64. public void connectConfiguration(int index) {

  65. // 索引大于配置好的网络索引返回

  66. if (index > mWifiConfiguration.size()) {

  67. return;

  68. }

  69. // 连接配置好的指定ID的网络

  70. mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,

  71. true);

  72. }
  73. public void startScan() {

  74. mWifiManager.startScan();

  75. // 得到扫描结果

  76. mWifiList = mWifiManager.getScanResults();

  77. // 得到配置好的网络连接

  78. mWifiConfiguration = mWifiManager.getConfiguredNetworks();

  79. }
  80. // 得到网络列表

  81. public List<ScanResult> getWifiList() {

  82. return mWifiList;

  83. }
  84. // 查看扫描结果

  85. public StringBuilder lookUpScan() {

  86. StringBuilder stringBuilder = new StringBuilder();

  87. for (int i = 0; i < mWifiList.size(); i++) {

  88. stringBuilder

  89. .append("Index_" + new Integer(i + 1).toString() + ":");

  90. // 将ScanResult信息转换成一个字符串包

  91. // 当中把包含:BSSID、SSID、capabilities、frequency、level

  92. stringBuilder.append((mWifiList.get(i)).toString());

  93. stringBuilder.append("/n");

  94. }

  95. return stringBuilder;

  96. }
  97. // 得到MAC地址

  98. public String getMacAddress() {

  99. return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();

  100. }
  101. // 得到接入点的BSSID

  102. public String getBSSID() {

  103. return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();

  104. }
  105. // 得到IP地址

  106. public int getIPAddress() {

  107. return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();

  108. }
  109. // 得到连接的ID

  110. public int getNetworkId() {

  111. return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();

  112. }
  113. // 得到WifiInfo的全部信息包

  114. public String getWifiInfo() {

  115. return (mWifiInfo == null) ?

    "NULL" : mWifiInfo.toString();


  116. }
  117. // 加入一个网络并连接

  118. public void addNetwork(WifiConfiguration wcg) {

  119. int wcgID = mWifiManager.addNetwork(wcg);

  120. mWifiManager.enableNetwork(wcgID, true);

  121. }
  122. // 断开指定ID的网络

  123. public void disconnectWifi(int netId) {

  124. mWifiManager.disableNetwork(netId);

  125. mWifiManager.disconnect();

  126. }

  127. }
package org.sunchao;

import java.util.List;

import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.WifiLock;

public class WifiAdmin {
// 定义WifiManager对象
private WifiManager mWifiManager;
// 定义WifiInfo对象
private WifiInfo mWifiInfo;
// 扫描出的网络连接列表
private List<ScanResult> mWifiList;
// 网络连接列表
private List<WifiConfiguration> mWifiConfiguration;
// 定义一个WifiLock
WifiLock mWifiLock;

// 构造器
public WifiAdmin(Context context) {
// 取得WifiManager对象
mWifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 取得WifiInfo对象
mWifiInfo = mWifiManager.getConnectionInfo();
}

// 打开WIFI
public void openWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}

// 关闭WIFI
public void closeWifi() {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}

// 检查当前WIFI状态
public int checkState() {
return mWifiManager.getWifiState();
}

// 锁定WifiLock
public void acquireWifiLock() {
mWifiLock.acquire();
}

// 解锁WifiLock
public void releaseWifiLock() {
// 推断时候锁定
if (mWifiLock.isHeld()) {
mWifiLock.acquire();
}
}

// 创建一个WifiLock
public void creatWifiLock() {
mWifiLock = mWifiManager.createWifiLock("Test");
}

// 得到配置好的网络
public List<WifiConfiguration> getConfiguration() {
return mWifiConfiguration;
}

// 指定配置好的网络进行连接
public void connectConfiguration(int index) {
// 索引大于配置好的网络索引返回
if (index > mWifiConfiguration.size()) {
return;
}
// 连接配置好的指定ID的网络
mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
true);
}

public void startScan() {
mWifiManager.startScan();
// 得到扫描结果
mWifiList = mWifiManager.getScanResults();
// 得到配置好的网络连接
mWifiConfiguration = mWifiManager.getConfiguredNetworks();
}

// 得到网络列表
public List<ScanResult> getWifiList() {
return mWifiList;
}

// 查看扫描结果
public StringBuilder lookUpScan() {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < mWifiList.size(); i++) {
stringBuilder
.append("Index_" + new Integer(i + 1).toString() + ":");
// 将ScanResult信息转换成一个字符串包
// 当中把包含:BSSID、SSID、capabilities、frequency、level
stringBuilder.append((mWifiList.get(i)).toString());
stringBuilder.append("/n");
}
return stringBuilder;
}

// 得到MAC地址
public String getMacAddress() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
}

// 得到接入点的BSSID
public String getBSSID() {
return (mWifiInfo == null) ?

"NULL" : mWifiInfo.getBSSID();
}

// 得到IP地址
public int getIPAddress() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
}

// 得到连接的ID
public int getNetworkId() {
return (mWifiInfo == null) ?

0 : mWifiInfo.getNetworkId();
}

// 得到WifiInfo的全部信息包
public String getWifiInfo() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
}

// 加入一个网络并连接
public void addNetwork(WifiConfiguration wcg) {
int wcgID = mWifiManager.addNetwork(wcg);
mWifiManager.enableNetwork(wcgID, true);
}

// 断开指定ID的网络
public void disconnectWifi(int netId) {
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
}
}

最后,我们看一下AndroidManifest.xml配置文件的代码。里面有须要用到的权限。这个比較重要,我刚開始就是忘记加入这些权限,程序一启动就挂。后来看LogCat才知道少了这些权限的。
AndroidManifest.xml:




  1. <?

    xml version="1.0" encoding="utf-8"?>


  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"

  3. package="org.sunchao" android:versionCode="1" android:versionName="1.0">

  4. <uses-sdk android:minSdkVersion="8" />
  5. <application android:icon="@drawable/icon" android:label="@string/app_name">

  6. <activity android:name=".Main" android:label="@string/app_name">

  7. <intent-filter>

  8. <action android:name="android.intent.action.MAIN" />

  9. <category android:name="android.intent.category.LAUNCHER" />

  10. </intent-filter>

  11. </activity>
  12. </application>

  13. <!-- 下面是使用wifi訪问网络所需的权限 -->

  14. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>

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

  16. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

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

  18. </manifest>
<?

xml version="1.0" encoding="utf-8"?

>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.sunchao" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
<!-- 下面是使用wifi訪问网络所需的权限 -->
<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>
</manifest>

至此这个Demo就完毕了,看效果图。



<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?

v=89860593.js?

cdnversion='+~(-new Date()/36e5)];</script>

阅读(1) | 评论(0) | 转发(0) |

Android之Wifi学习(1)的更多相关文章

  1. Android打开WIFI或者移动网络的代码实现

    MainActivity如下: package wy.testnetwork; import java.lang.reflect.Field; import java.lang.reflect.Inv ...

  2. Android安装器学习笔记(一)

    Android安装器学习笔记(一) 一.Android应用的四种安装方式: 1.通过系统应用PackageInstaller.apk进行安装,安装过程中会让用户确认 2.系统程序安装:在开机的时候自动 ...

  3. [活动已结束]《深入理解Android:Wi-Fi、NFC和GPS卷》CSDN社区活动

    今天有一个CSDN社区活动,解答关于Android系统的学习.认识.开发等方面的问题,并就<深入理解Android:Wi-Fi.NFC和GPS卷>一书为大家答疑解惑,了解Android F ...

  4. 【Android】wifi开发

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点 ...

  5. android.net.wifi的简单使用方法

    获取Wifi的控制类WifiManager.  WifiManager  wm=(WifiManager)getSystemService(Context.WIFI_SERVICE); 接下来可以对w ...

  6. android开发 wifi开发工具类

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import j ...

  7. android NDK 实用学习(五)-c++端调用java接口

    1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...

  8. android NDK 实用学习(三)- java端类对象的构造及使用

    1,读此文章前我假设你已经读过: android NDK 实用学习-获取java端类及其类变量 android NDK 实用学习-java端对象成员赋值和获取对象成员值 2,java端类对象的构造: ...

  9. android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值

    1,关于java端类及接口定义请参考: android NDK 实用学习-获取java端类及其类变量 2,对传过来的参数进行赋值: 对bool类型成员进行赋值  env->SetBooleanF ...

随机推荐

  1. IDEA创建Web项目(maven)

    第一步:创建项目 第二步:使用maven创建,并选择jdk 第三步:修改项目名称 第四步:选择自动导入依赖(很重要!!) 第五步:添加核心依赖和打包 第六步:编译一下 第七步:配置web容器(这里是用 ...

  2. IDEA设置

    一:代码提示 二:自动导入

  3. c#中的委託,匿名方法和lambda表達式

    (原博)http://www.cnblogs.com/niyw/archive/2010/10/07/1845232.html 简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我 ...

  4. mybatis提示Invalid bound statement (not found)错误的可能原因

    https://www.cnblogs.com/liaojie970/p/8034525.html

  5. 用面向对象重写thread 实现多次调用一个线程

    思路: 利用thread类中,run方法在子线程中调用,其他方法在主线程调用,所以将生产者写入主线程,将消费者写入run函数中在子线程中执行,完成生产者消费者模型 注意: 1. 要在 init 函数中 ...

  6. vmware + centos 7安装vmtools时提示The path "" is not a valid path to the xxx kernel header

    在安装vmtools时无意中出现了这样的问题 1.gcc错误 Searching for GCC- The path "" is not valid path to the gcc ...

  7. hdu 2364 Escape【模拟优先队列】【bfs】

    题目链接:https://vjudge.net/contest/184966#problem/A 题目大意: 走迷宫.从某个方向进入某点,优先走左或是右.如果左右都走不通,再考虑向前.绝对不能往后走, ...

  8. MySQL5.6 大量SQL语句处于Writing to net状态的案例分析

    [问题现象] 开发同事反馈有应用在21:00-22:00之间出现大量超时报错. [问题分析] 1. 从DB服务器慢查询指标来看,18:00后有大量的慢查询,累计产生了约9000条慢查询 2. 测试直接 ...

  9. Junit4单元测试的基本用法

    看了一些Junit4的视频,简单了解了Junit4的一些基本用法,整理记录一下. 环境搭建 这里使用的开发工具是MyEclipse,首先新建一个Java工程,将Junit4的jar包引入,eclips ...

  10. CODEVS 1074 食物链 2001年NOI全国竞赛(洛谷 P2024)

    题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并 ...