Android之Wifi学习(1)
在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吧。程序已启动效果图例如以下:

看代码。当中有凝视。我就不多说了。
布局文件代码:
- <?
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>
 
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中显示右側滚动栏,假设数据多的话,则能够往下滑动继续显示未显示完的数据。
主页面代码:
- 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;
 - }
 - }
 - }
 
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工具类代码:
- 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();
 - }
 - }
 
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:
- <?
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>
 
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)的更多相关文章
- Android打开WIFI或者移动网络的代码实现
		
MainActivity如下: package wy.testnetwork; import java.lang.reflect.Field; import java.lang.reflect.Inv ...
 - Android安装器学习笔记(一)
		
Android安装器学习笔记(一) 一.Android应用的四种安装方式: 1.通过系统应用PackageInstaller.apk进行安装,安装过程中会让用户确认 2.系统程序安装:在开机的时候自动 ...
 - [活动已结束]《深入理解Android:Wi-Fi、NFC和GPS卷》CSDN社区活动
		
今天有一个CSDN社区活动,解答关于Android系统的学习.认识.开发等方面的问题,并就<深入理解Android:Wi-Fi.NFC和GPS卷>一书为大家答疑解惑,了解Android F ...
 - 【Android】wifi开发
		
WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点 ...
 - android.net.wifi的简单使用方法
		
获取Wifi的控制类WifiManager. WifiManager wm=(WifiManager)getSystemService(Context.WIFI_SERVICE); 接下来可以对w ...
 - android开发 wifi开发工具类
		
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import j ...
 - android NDK 实用学习(五)-c++端调用java接口
		
1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...
 - android NDK 实用学习(三)- java端类对象的构造及使用
		
1,读此文章前我假设你已经读过: android NDK 实用学习-获取java端类及其类变量 android NDK 实用学习-java端对象成员赋值和获取对象成员值 2,java端类对象的构造: ...
 - android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值
		
1,关于java端类及接口定义请参考: android NDK 实用学习-获取java端类及其类变量 2,对传过来的参数进行赋值: 对bool类型成员进行赋值 env->SetBooleanF ...
 
随机推荐
- 033 Url中特殊字符的处理
			
在url跳转页面的时候,参数值中的#不见了,一直没有处理,今天有空看了一下,后来发现后台的过滤器之类的都没有处理,就比较奇怪了,原来是特殊字符的问题. 一:Url中的特殊字符 1.说明 这里还是需要做 ...
 - hdu 3499 flight 【分层图】+【Dijkstra】
			
<题目链接> 题目大意: 现在给你一些点,这些点之间存在一些有向边,每条边都有对应的边权,有一次机会能够使某条边的边权变为原来的1/2,求从起点到终点的最短距离. 解题分析: 分层图最短路 ...
 - suctf逆向部分
			
自己真的菜,然后在网上找了一篇分析pyc反编译后的文件然后进行手撸opcode,过程真痛苦 http://www.wooy0ung.me/writeup/2017/10/11/0ctf-quals-2 ...
 - 2018ddctf wp
			
杂项 第一题:颜文字 看过以后开始没思路:后来有师傅说是十六进制 我就上网百度了一下http://tieba.baidu.com/p/3717777553 但是不可能是完全十六进制啊,毕竟出题人很羞涩 ...
 - SQL 自定义四舍五入
			
--============================================== -- 自定义的四舍五入(四舍五入后的所有尾数遇进则进) -- by 小天使 2015-11-12 -- ...
 - git提交待审核代码,报错没有change-id的解决方法
			
git提交是报错没有change-id的解决方法: 1.先仔细查看报错内容,查出是哪天提交记录缺少change-id 2.如果是最近的一条缺少,则直接执行git commit --amend &quo ...
 - [CC-CMPVIRS]Computer Virus
			
[CC-CMPVIRS]Computer Virus 题目大意: 有一张纸带,从左到右被分成了\(n(n\le10^7)\)个格子,在刚开始,第\(i\)个格子上写着数字\(i\).这张纸带被分成了从 ...
 - 回文检测 [USACO Training Section 1.3]
			
题目描述 据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文.你的工作就是去寻找这些牛制造的奇观(最棒的回文). 在寻找回文时不用理睬那些标点符号.空格( ...
 - 3ds max 学习笔记(四)--创建物体
			
添加物体: 1.初创建物体,从单视图进行创建,便于处于同一平面,在透视图观看效果.2.在基本对象处选择“长方体”:左键开始制作,松开左键此时控制的是长方形的高,然后点击左键完成:注:在max里点击右键 ...
 - pointer-net
			
Pointer network 主要用在解决组合优化类问题(TSP, Convex Hull等等),实际上是Sequence to Sequence learning中encoder RNN和deco ...