实例介绍
【实例简介】
wifi基本功能
【实例截图】
【核心代码】
package com.ethanco.wifitransmit;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.DhcpInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class QuickTransferActivity extends Activity implements DisplayMesage, ITransferResult {
/**
* Called when the activity is first created.
*/
TextView content;
Button mBtn3, mBtn4;
WifiAdmin mWifiAdmin;
WifiApAdmin wifiAp;
Context context;
final static String TAG = "robin";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
content = (TextView) this.findViewById(R.id.content);
/**
* 打开的步骤见 http://blog.csdn.net/hudashi/article/details/25283087
*/
mBtn3 = (Button) findViewById(R.id.button3);
mBtn4 = (Button) findViewById(R.id.button4);
mBtn3.setText("点击连接Wifi");
mBtn4.setText("点击创建Wifi热点");
context = this;
mBtn3.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mWifiAdmin = new WifiAdmin(context) {
@Override
public void myUnregisterReceiver(BroadcastReceiver receiver) {
// TODO Auto-generated method stub
unregisterReceiver(receiver);
}
@Override
public Intent myRegisterReceiver(BroadcastReceiver receiver, IntentFilter filter) {
// TODO Auto-generated method stub
registerReceiver(receiver, filter);
return null;
}
@Override
public void onNotifyWifiConnected() {
// TODO Auto-generated method stub
Log.v(TAG, "have connected success!");
Log.v(TAG, "###############################");
}
@Override
public void onNotifyWifiConnectFailed() {
// TODO Auto-generated method stub
Log.v(TAG, "have connected failed!");
Log.v(TAG, "###############################");
}
};
mWifiAdmin.openWifi();
mWifiAdmin.addNetwork(mWifiAdmin.createWifiInfo(Constant.HOST_SPOT_SSID, Constant.HOST_SPOT_PASS_WORD,
WifiAdmin.TYPE_WPA));
}
});
mBtn4.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
wifiAp = new WifiApAdmin(context);
wifiAp.startWifiAp(Constant.HOST_SPOT_SSID, Constant.HOST_SPOT_PASS_WORD);
}
});
}
public void onClick(View view) {
if (view.getId() == R.id.button1) {
WifiManager wifiManage = (WifiManager) getSystemService(Context.WIFI_SERVICE);
DhcpInfo info = wifiManage.getDhcpInfo();
WifiInfo wifiinfo = wifiManage.getConnectionInfo();
String ip = intToIp(wifiinfo.getIpAddress());
String serverAddress = intToIp(info.serverAddress);
new Sender(serverAddress, this, this).start();
Log.w("robin", "ip:" ip "serverAddress:" serverAddress info);
} else if (view.getId() == R.id.button2) {
Receiver service = new Receiver(this, this);
service.start();
}
}
Handler handler = new Handler();
StringBuffer strBuffer = new StringBuffer();
public void displayMesage(final String msg) {
Runnable r = new Runnable() {
public void run() {
// TODO Auto-generated method stub
if (strBuffer.length() > 1024) {
strBuffer.delete(0, 100);
}
strBuffer.append(msg "\n");
content.setText(strBuffer.toString());
content.invalidate();
}
};
handler.post(r);
}
// 将获取的int转为真正的ip地址,参考的网上的,修改了下
private String intToIp(int i) {
return (i & 0xFF) "." ((i >> 8) & 0xFF) "." ((i >> 16) & 0xFF) "." ((i >> 24) & 0xFF);
}
@Override
public void appendMesage(String msg) {
displayMesage(msg);
}
@Override
public void onResult(int result, long size) {
if (wifiAp != null) {
wifiAp.closeWifiAp(context);
}
// TODO Auto-generated method stub
closeWifi();
Runnable r = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
displayMesage("try to open wifi");
openWifi();
displayMesage("open wifi end");
}
};
handler.postDelayed(r, 30 * 1000);
}
WifiManager mWifiManager;
// 打开WIFI
public void openWifi() {
if (mWifiAdmin != null) {
mWifiAdmin.openWifi();
return;
}
if (mWifiManager == null) {
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
// 关闭WIFI
public void closeWifi() {
if (mWifiAdmin != null) {
mWifiAdmin.closeWifi();
return;
}
if (mWifiManager == null) {
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
}
interface DisplayMesage {
void displayMesage(String msg);
void appendMesage(String msg);
}
interface ITransferResult {
void onResult(int result, long size);
}
class Receiver extends Thread {
private static BufferedReader in;
DisplayMesage console;
ITransferResult transferResult;
Receiver(DisplayMesage console, ITransferResult transferResult) {
super();
this.console = console;
this.transferResult = transferResult;
}
public void run() {
try {
ServerSocket socketService = new ServerSocket(3358);
Log.i("robin", "waiting a connection from the client" socketService);
Socket sock = socketService.accept();
String hostAddress = sock.getLocalAddress().getHostAddress();
String inetAddress = sock.getInetAddress().getHostAddress();
Log.w("robin", "local:" hostAddress "| inetAddress" inetAddress "|" sock.getRemoteSocketAddress());
Log.w("robin", "local name:" sock.getLocalAddress().getHostName() "| inetAddress"
sock.getInetAddress().getHostName() "|" InetAddress.getLocalHost().getHostAddress());
in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String line;
boolean flag = true;
long count = 0;
long time = System.currentTimeMillis();
do {
line = in.readLine();
if (flag) {
console.displayMesage("Recevie:" line);
flag = false;
}
count = count line.length();
if (count % 1024 == 0) {
console.displayMesage("Recevied:" ((count << 1) >> 10) "kB data");
}
} while (!Constant.END.equals(line));
Log.w("robin", "you input is :" line);
long t = System.currentTimeMillis() - time;
if (t == 0)
t = 1;
count = count << 1;
long rate = ((count / t) * 1000) / 1024;
count = count >> 10;
console.displayMesage("Recevied:" count "kB data" " in " t " ms" " at rate:" rate
" kB/second");
Log.i("robin", "exit the app");
sock.close();
socketService.close();
transferResult.onResult(1, count);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Sender extends Thread {
DisplayMesage console;
String serverIp;
ITransferResult transferResult;
Sender(String serverAddress, DisplayMesage console, ITransferResult transferResult) {
super();
serverIp = serverAddress;
this.console = console;
this.transferResult = transferResult;
}
public void run() {
Socket sock = null;
PrintWriter out;
try {
// 声明sock,其中参数为服务端的IP地址与自定义端口
sock = new Socket(serverIp, 3358);
Log.w("robin", "I am try to writer" sock);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
char data[] = new char[1024 * 10];
for (int i = 0; i < data.length; i ) {
data[i] = (char) i;
}
try {
if (sock != null) {
// 声明输出流out,向服务端输出“Output Message!!”
final String msg = "Hello,this is robin!!";
Log.w("robin", "try to writer");
out = new PrintWriter(sock.getOutputStream(), true);
StringBuffer strBuffer = new StringBuffer();
strBuffer.append(msg);
String str = msg;
for (int i = 0; i < 1024; i ) {
if (i != 0) {
str = msg System.currentTimeMillis() "|";
out.write(data);
}
out.println(str);
Log.w("robin", str);
if (i == 0) {
console.displayMesage("send message....");
} else if (i % 100 == 0) {
console.displayMesage("send message " i " success!");
}
if (strBuffer.length() > 1024) {
strBuffer.delete(0, strBuffer.length());
}
}
out.println(Constant.END);
out.flush();
}
transferResult.onResult(1, 1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (sock != null) {
sock.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论