剖析一个WIFI搜索、创建、关闭、连接及一些简单的动画==============
/**
* 主界面
* @author ZHF
*
*/
public
class
MainActivity
extends
Activity
implements
EventHandler{
//消息事件
public
static
final
int
m_nWifiSearchTimeOut =
0
;
// 搜索超时
public
static
final
int
m_nWTScanResult =
1
;
// 搜索到wifi返回结果
public
static
final
int
m_nWTConnectResult =
2
;
// 连接上wifi热点
public
static
final
int
m_nCreateAPResult =
3
;
// 创建热点结果
public
static
final
int
m_nUserResult =
4
;
// 用户上线人数更新命令(待定)
public
static
final
int
m_nWTConnected =
5
;
// 点击连接后断开wifi,3.5秒后刷新adapter
//一些常量
public
static
final
String PACKAGE_NAME =
'com.zhf.wifidemo.wifi'
;
//应用包名
public
static
final
String FIRST_OPEN_KEY =
'version'
;
//版本号信息
public
static
final
String WIFI_AP_HEADER =
'zhf_'
;
public
static
final
String WIFI_AP_PASSWORD =
'zhf12345'
;
//wifi操作事件(枚举)-->方便弹出对话框处理事件
private
int
wFOperateEnum = WFOperateEnum.NOTHING;
//三个重要的类
public
WFSearchProcess m_wtSearchProcess;
//WiFi搜索进度条线程
public
WifiAdmin m_wiFiAdmin;
//Wifi管理类
public
CreateAPProcess m_createAPProcess;
//创建Wifi热点线程
//相关控件
private
WFSearchAnimationFrameLayout m_FrameLWTSearchAnimation;
//自定义雷达动画布局
private
GifView m_gifRadar;
//wifi信号动画布局
private
LinearLayout m_linearLCreateAP;
//创建热点View
private
ProgressBar m_progBarCreatingAP;
//创建热点进度条
private
TextView m_textVPromptAP;
//创建热点进度条文字
private
Button m_btnBack;
//左上角返回按钮
private
Button m_btnSearchWF;
//右上角wifi搜索按钮
private
Button m_btnCreateWF;
//创建wifi热点
private
ListView m_listVWT;
//显示信息
private
LinearLayout m_LinearLDialog;
//提醒对话框
private
TextView m_textVContentDialog;
//对话框文本内容
private
Button m_btnConfirmDialog, m_btnCancelDialog;
//提醒对话框上的按钮
private
TextView m_textVWTPrompt;
//中间文字提示
private
boolean
m_isFirstOpen =
true
;
//标记是否是第一次打开
ArrayList<ScanResult> m_listWifi =
new
ArrayList();
//检测到热点信息列表
private
WTAdapter m_wTAdapter;
//网络列表适配器
public
Handler mHandler =
new
Handler() {
public
void
handleMessage(android.os.Message msg) {
switch
(msg.what) {
case
m_nWifiSearchTimeOut:
// 搜索超时
m_wtSearchProcess.stop();
m_FrameLWTSearchAnimation.stopAnimation();
m_listWifi.clear();
//网络列表
//设置控件
m_textVWTPrompt.setVisibility(View.VISIBLE);
m_textVWTPrompt.setText(
'需要重新搜索,点右上角重新搜索或创建新的热点...'
);
break
;
case
m_nWTScanResult:
//扫描到结果
m_listWifi.clear();
if
(m_wiFiAdmin.mWifiManager.getScanResults() !=
null
) {
for
(
int
i =
0
; i < m_wiFiAdmin.mWifiManager.getScanResults().size(); i ) {
ScanResult scanResult = m_wiFiAdmin.mWifiManager.getScanResults().get(i);
//和指定连接热点比较,将其他的过滤掉!
if
(scanResult.SSID.startsWith(WIFI_AP_HEADER)) {
m_listWifi.add(scanResult);
}
}
if
(m_listWifi.size() >
0
) {
m_wtSearchProcess.stop();
m_FrameLWTSearchAnimation.stopAnimation();
m_textVWTPrompt.setVisibility(View.GONE);
//更新列表,显示出搜索到的热点
m_wTAdapter.setData(m_listWifi);
m_wTAdapter.notifyDataSetChanged();
}
}
break
;
case
m_nWTConnectResult:
//连接结果
m_wTAdapter.notifyDataSetChanged();
//刷新适配器数据
break
;
case
m_nCreateAPResult:
//创建wifi热点结果
m_createAPProcess.stop();
m_progBarCreatingAP.setVisibility(View.GONE);
//旋转进度条
if
((m_wiFiAdmin.getWifiApState() ==
3
|| m_wiFiAdmin.getWifiApState() ==
13
) && (m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER))) {
//设置控件
m_textVWTPrompt.setVisibility(View.GONE);
m_linearLCreateAP.setVisibility(View.VISIBLE);
m_btnCreateWF.setVisibility(View.VISIBLE);
m_gifRadar.setVisibility(View.VISIBLE);
m_btnCreateWF.setBackgroundResource(R.drawable.x_ap_close);
m_textVPromptAP.setText(
'热点创建成功!'
'\n热点名:'
m_wiFiAdmin.getApSSID()
'\n连接密码:zhf12345'
);
}
else
{
m_btnCreateWF.setVisibility(View.VISIBLE);
m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
m_textVPromptAP.setText(
'热点创建失败,您可以重新创建或者搜索其它热点'
);
}
break
;
case
m_nUserResult :
//更新用户上线人数
break
;
case
m_nWTConnected:
//点击连接后断开wifi,3.5s后刷新
m_wTAdapter.notifyDataSetChanged();
break
;
}
};
};
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.wt_main);
//搜索Wifi
m_wtSearchProcess =
new
WFSearchProcess(
this
);
//创建Wifi热点
m_createAPProcess =
new
CreateAPProcess(
this
);
//wifi管理类
m_wiFiAdmin = WifiAdmin.getInstance(
this
);
//初始化View
initView();
}
/**初始化View**/
private
void
initView() {
// 监听广播
WIFIBroadcast.ehList.add(
this
);
/******************************实例化布局**************************************/
m_linearLCreateAP = (LinearLayout) findViewById(R.id.create_ap_llayout_wt_main);
//创建热点View
m_progBarCreatingAP = (ProgressBar) findViewById(R.id.creating_progressBar_wt_main);
//创建热点进度条
m_textVPromptAP = (TextView) findViewById(R.id.prompt_ap_text_wt_main);
//创建热点进度条文字
m_FrameLWTSearchAnimation = ((WFSearchAnimationFrameLayout) findViewById(R.id.search_animation_wt_main));
// 搜索时的动画
m_listVWT = ((ListView) findViewById(R.id.wt_list_wt_main));
// 搜索到的热点listView
//注意此处
m_wTAdapter =
new
WTAdapter(
this
, m_listWifi);
m_listVWT.setAdapter(m_wTAdapter);
m_textVWTPrompt = (TextView) findViewById(R.id.wt_prompt_wt_main);
//中间提醒文字
m_gifRadar = (GifView) findViewById(R.id.radar_gif_wt_main);
//gif动画
//提醒对话框布局
m_LinearLDialog = (LinearLayout) findViewById(R.id.dialog_layout_wt_main);
m_textVContentDialog = (TextView) findViewById(R.id.content_text_wtdialog);
m_btnConfirmDialog = (Button) findViewById(R.id.confirm_btn_wtdialog);
m_btnCancelDialog = (Button) findViewById(R.id.cancel_btn_wtdialog);
//左上角返回键
m_btnBack = (Button) findViewById(R.id.back_btn_wt_main);
m_btnBack.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
onBackPressed();
//相当于调用系统返回键,结束当前Activity
}
});
//右上角搜索热点按钮
m_btnSearchWF = (Button) findViewById(R.id.search_btn_wt_main);
m_btnSearchWF.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
if
(!m_wtSearchProcess.running) {
//搜索线程没有开启
//1.当前热点或wifi连接着 WIFI_STATE_ENABLED 3 //WIFI_AP_STATE_ENABLED 13
if
(m_wiFiAdmin.getWifiApState() ==
3
|| m_wiFiAdmin.getWifiApState() ==
13
) {
wFOperateEnum = WFOperateEnum.SEARCH;
//搜索wifi事件
m_LinearLDialog.setVisibility(View.VISIBLE);
///wifi提示对话框显示
m_textVContentDialog.setText(
'是否关闭当前热点去搜索其他热点?'
);
return
;
//跳出此方法,交由对话框来处理事件
}
//2.当前没有热点或wifi连接着
if
(!m_wiFiAdmin.mWifiManager.isWifiEnabled()) {
//如果wifi没打开
m_wiFiAdmin.OpenWifi();
}
m_textVWTPrompt.setVisibility(View.VISIBLE);
//中间提示文字
m_textVWTPrompt.setText(
'正在搜索附近的热点...'
);
m_linearLCreateAP.setVisibility(View.GONE);
//创建wifi热点布局消失
m_gifRadar.setVisibility(View.GONE);
//热点连接动画消失
m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
//更改按钮文字“创建”
//开始搜索wifi
m_wiFiAdmin.startScan();
m_wtSearchProcess.start();
//开启搜索线程
m_FrameLWTSearchAnimation.startAnimation();
//开启波纹动画
}
else
{
//搜索线程开启着,再次点击按钮
//重新启动
m_wtSearchProcess.stop();
m_wiFiAdmin.startScan();
//开始搜索wifi
m_wtSearchProcess.start();
}
}
});
//中间创建wifi热点按钮
m_btnCreateWF = (Button) findViewById(R.id.create_btn_wt_main);
m_btnCreateWF.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
if
(m_wiFiAdmin.getWifiApState() ==
4
) {
// WIFI_STATE_UNKNOWN
Toast.makeText(getApplicationContext(),
'您的设备不支持热点创建!'
, Toast.LENGTH_SHORT).show();
return
;
}
if
(m_wiFiAdmin.mWifiManager.isWifiEnabled()) {
//目前连着wifi
wFOperateEnum = WFOperateEnum.CREATE;
//wifi热点创建事件
m_LinearLDialog.setVisibility(View.VISIBLE);
//对话框可用
m_textVContentDialog.setText(
'创建热点会关闭当前的WiFi,确认继续?'
);
return
;
}
if
((m_wiFiAdmin.getWifiApState() ==
3
|| m_wiFiAdmin.getWifiApState() ==
13
)
&& (!m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER))) {
//目前连接着其他热点名
wFOperateEnum = WFOperateEnum.CREATE;
//wifi热点创建事件
m_LinearLDialog.setVisibility(View.VISIBLE);
m_textVContentDialog.setText(
'系统热点被占用,点确定开启热点以传输文件!'
);
return
;
}
if
(((m_wiFiAdmin.getWifiApState() ==
3
) || (m_wiFiAdmin.getWifiApState() ==
13
))
&& (m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER))) {
//目前连接着自己指定的Wifi热点
wFOperateEnum = WFOperateEnum.CLOSE;
//wifi热点关闭事件
m_LinearLDialog.setVisibility(View.VISIBLE);
m_textVContentDialog.setText(
'关闭热点会中断当前传输,您确定这么做?'
);
return
;
}
if
(m_wtSearchProcess.running) {
m_wtSearchProcess.stop();
//停止线程
m_FrameLWTSearchAnimation.stopAnimation();
//停止动画
}
/******************点击创建热点时没有连接wifi或热点的情况*****************************/
//关闭Wifi
m_wiFiAdmin.closeWifi();
//创建热点(名字,密码,加密类型,wifi/ap类型)
m_wiFiAdmin.createWifiAP(m_wiFiAdmin.createWifiInfo(WIFI_AP_HEADER getLocalHostName(), WIFI_AP_PASSWORD,
3
,
'ap'
),
true
);
m_createAPProcess.start();
//开启创建热点线程
//将wifi信息列表设置到listview中
m_listWifi.clear();
m_wTAdapter.setData(m_listWifi);
m_wTAdapter.notifyDataSetChanged();
//设置布局
m_linearLCreateAP.setVisibility(View.VISIBLE);
//热点布局可用
m_progBarCreatingAP.setVisibility(View.VISIBLE);
m_textVPromptAP.setText(
'正在创建热点'
);
//进度条文字
m_btnCreateWF.setVisibility(View.GONE);
//点击一次不可再点
m_textVWTPrompt.setVisibility(View.GONE);
}
});
//对话框确认按钮
m_btnConfirmDialog.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
m_LinearLDialog.setVisibility(View.GONE);
//让对话框布局消失
switch
(wFOperateEnum) {
//根据wifi操作事件
case
WFOperateEnum.CLOSE:
//关闭wifi热点
//设置布局
m_textVWTPrompt.setVisibility(View.VISIBLE);
m_textVWTPrompt.setText(
'热点已关闭!可以进行其他操作了!'
);
//中间提醒文字
m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
//按钮文字改回“创建”
m_gifRadar.setVisibility(View.GONE);
//热点动画停止
m_linearLCreateAP.setVisibility(View.GONE);
//下部创建热点布局不可用
//关闭热点
m_wiFiAdmin.createWifiAP(m_wiFiAdmin.createWifiInfo(m_wiFiAdmin.getApSSID(),
'zhf123456'
,
3
,
'ap'
),
false
);
break
;
case
WFOperateEnum.CREATE:
//创建wifi热点
if
(m_wtSearchProcess.running) {
m_wtSearchProcess.stop();
//搜索wifi线程停止
m_FrameLWTSearchAnimation.stopAnimation();
//搜索wifi动画停止
}
//关闭wifi
m_wiFiAdmin.closeWifi();
//创建WiFi热点
m_wiFiAdmin.createWifiAP(m_wiFiAdmin.createWifiInfo(WIFI_AP_HEADER getLocalHostName(), WIFI_AP_PASSWORD,
3
,
'ap'
),
true
);
m_createAPProcess.start();
//刷新listView布局
m_listWifi.clear();
m_wTAdapter.setData(m_listWifi);
m_wTAdapter.notifyDataSetChanged();
//设置布局
m_linearLCreateAP.setVisibility(View.VISIBLE);
m_progBarCreatingAP.setVisibility(View.VISIBLE);
//旋转进度条
m_btnCreateWF.setVisibility(View.GONE);
m_textVWTPrompt.setVisibility(View.GONE);
m_textVPromptAP.setText(
'正在创建热点...'
);
//进度条文字
break
;
case
WFOperateEnum.SEARCH:
//搜索可用热点
//设置布局
m_textVWTPrompt.setVisibility(View.VISIBLE);
m_textVWTPrompt.setText(
'正在搜索附近的热点...'
);
m_linearLCreateAP.setVisibility(View.GONE);
//创建热点布局不可用
m_btnCreateWF.setVisibility(View.VISIBLE);
m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
//按钮文字改回“创建”
m_gifRadar.setVisibility(View.GONE);
//热点动画停止
m_linearLCreateAP.setVisibility(View.GONE);
//下部创建热点布局不可用
//搜索热点线程关闭
if
(m_createAPProcess.running)
m_createAPProcess.stop();
//关闭热点
m_wiFiAdmin.createWifiAP(m_wiFiAdmin.createWifiInfo(m_wiFiAdmin.getApSSID(), WIFI_AP_PASSWORD,
3
,
'ap'
),
false
);
//打开wifi
m_wiFiAdmin.OpenWifi();
m_wtSearchProcess.start();
m_FrameLWTSearchAnimation.startAnimation();
break
;
}
}
});
//对话框取消按钮事件
m_btnCancelDialog.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
//对话框布局消失
m_LinearLDialog.setVisibility(View.GONE);
}
});
}
/**Wifi是否连接**/
private
boolean
isWifiConnect() {
boolean
isConnect =
true
;
//用于网络连接状态的检测
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if
(!cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected())
isConnect =
false
;
return
isConnect;
}
/**获取wifi热点状态**/
public
boolean
getWifiApState() {
try
{
WifiManager localWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method m = localWifiManager.getClass().getMethod(
'getWifiApState'
,
new
Class[
0
]);
int
i = (Integer)(m.invoke(localWifiManager,
new
Object[
0
]));
return
(
3
== i) || (
13
== i);
//WIFI_STATE_ENABLED 3 //WIFI_AP_STATE_ENABLED 13
}
catch
(Exception e) {
e.printStackTrace();
}
return
false
;
}
/**获取手机信息**/
public
String getLocalHostName() {
String str1 = Build.BRAND;
//主板
String str2 = Build.MODEL;
//机型
if
(-
1
== str2.toUpperCase().indexOf(str1.toUpperCase()))
str2 = str1
'_'
str2;
return
str2;
}
private
void
init() {
//线程是否在运行
if
(
this
.m_wtSearchProcess.running ||
this
.m_createAPProcess.running) {
return
;
}
//没有连接上wifi或者是wifi热点
if
(!isWifiConnect() && !getWifiApState()) {
m_wiFiAdmin.OpenWifi();
m_wtSearchProcess.start();
//开启搜索wifi超时检测线程
m_wiFiAdmin.startScan();
//开启搜索wifi
//开启搜索动画
m_FrameLWTSearchAnimation.startAnimation();
//设置控件
m_textVWTPrompt.setVisibility(View.VISIBLE);
m_textVWTPrompt.setText(
' 正在搜索附近的热点...'
);
m_linearLCreateAP.setVisibility(View.GONE);
m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
}
//连接上wifi
if
(isWifiConnect()) {
this
.m_wiFiAdmin.startScan();
this
.m_wtSearchProcess.start();
this
.m_FrameLWTSearchAnimation.startAnimation();
//设置控件
this
.m_textVWTPrompt.setVisibility(
0
);
this
.m_textVWTPrompt.setText(
'正在搜索附近的热点...'
);
this
.m_linearLCreateAP.setVisibility(View.GONE);
this
.m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
this
.m_gifRadar.setVisibility(View.GONE);
m_listWifi.clear();
if
(m_wiFiAdmin.mWifiManager.getScanResults() !=
null
) {
for
(
int
i =
0
; i < m_wiFiAdmin.mWifiManager.getScanResults().size(); i ) {
//识别出自己自定连接的wifi
if
(m_wiFiAdmin.mWifiManager.getScanResults().get(i).SSID.startsWith(WIFI_AP_HEADER)) {
m_listWifi.add(m_wiFiAdmin.mWifiManager.getScanResults().get(i));
//将指定wifi添加进去
}
}
m_wTAdapter.setData(m_listWifi);
//将连接的信息添加到listView中
m_wTAdapter.notifyDataSetChanged();
}
//连接上wifi热点
if
(getWifiApState()){
if
(m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER)) {
//设置控件
m_textVWTPrompt.setVisibility(View.GONE);
m_linearLCreateAP.setVisibility(View.VISIBLE);
m_progBarCreatingAP.setVisibility(View.GONE);
m_btnCreateWF.setVisibility(View.VISIBLE);
m_gifRadar.setVisibility(View.VISIBLE);
m_btnCreateWF.setBackgroundResource(R.drawable.x_ap_close);
m_textVPromptAP.setText(
'\n热点名:'
m_wiFiAdmin.getApSSID()
'\n连接密码:zhf12345'
);
}
}
}
}
@Override
protected
void
onDestroy() {
// TODO Auto-generated method stub
super
.onDestroy();
WIFIBroadcast.ehList.remove(
this
);
}
@Override
public
void
handleConnectChange() {
Message msg = mHandler.obtainMessage(m_nWTConnectResult);
mHandler.sendMessage(msg);
}
@Override
public
void
scanResultsAvaiable() {
Message msg = mHandler.obtainMessage(m_nWTScanResult);
mHandler.sendMessage(msg);
}
@Override
public
void
wifiStatusNotification() {
m_wiFiAdmin.mWifiManager.getWifiState();
//获取当前wifi状态
}
}
赞 (0)