/**
* 主界面
* @author ZHF
*
*/
public
class
MainActivity
extends
Activity
implements
EventHandler{
public
static
final
int
m_nWifiSearchTimeOut =
0
;
public
static
final
int
m_nWTScanResult =
1
;
public
static
final
int
m_nWTConnectResult =
2
;
public
static
final
int
m_nCreateAPResult =
3
;
public
static
final
int
m_nUserResult =
4
;
public
static
final
int
m_nWTConnected =
5
;
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"
;
private
int
wFOperateEnum = WFOperateEnum.NOTHING;
public
WFSearchProcess m_wtSearchProcess;
public
WifiAdmin m_wiFiAdmin;
public
CreateAPProcess m_createAPProcess;
private
WFSearchAnimationFrameLayout m_FrameLWTSearchAnimation;
private
GifView m_gifRadar;
private
LinearLayout m_linearLCreateAP;
private
ProgressBar m_progBarCreatingAP;
private
TextView m_textVPromptAP;
private
Button m_btnBack;
private
Button m_btnSearchWF;
private
Button m_btnCreateWF;
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:
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:
m_wTAdapter.notifyDataSetChanged();
break
;
}
};
};
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.wt_main);
m_wtSearchProcess =
new
WFSearchProcess(
this
);
m_createAPProcess =
new
CreateAPProcess(
this
);
m_wiFiAdmin = WifiAdmin.getInstance(
this
);
initView();
}
/**初始化View**/
private
void
initView() {
WIFIBroadcast.ehList.add(
this
);
/******************************实例化布局**************************************/
m_linearLCreateAP = (LinearLayout) findViewById(R.id.create_ap_llayout_wt_main);
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));
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);
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();
}
});
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) {
if
(m_wiFiAdmin.getWifiApState() ==
3
|| m_wiFiAdmin.getWifiApState() ==
13
) {
wFOperateEnum = WFOperateEnum.SEARCH;
m_LinearLDialog.setVisibility(View.VISIBLE);
m_textVContentDialog.setText(
"是否关闭当前热点去搜索其他热点?"
);
return
;
}
if
(!m_wiFiAdmin.mWifiManager.isWifiEnabled()) {
m_wiFiAdmin.OpenWifi();
}
m_textVWTPrompt.setVisibility(View.VISIBLE);
m_textVWTPrompt.setText(
"正在搜索附近的热点..."
);
m_linearLCreateAP.setVisibility(View.GONE);
m_gifRadar.setVisibility(View.GONE);
m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
m_wiFiAdmin.startScan();
m_wtSearchProcess.start();
m_FrameLWTSearchAnimation.startAnimation();
}
else
{
m_wtSearchProcess.stop();
m_wiFiAdmin.startScan();
m_wtSearchProcess.start();
}
}
});
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
) {
Toast.makeText(getApplicationContext(),
"您的设备不支持热点创建!"
, Toast.LENGTH_SHORT).show();
return
;
}
if
(m_wiFiAdmin.mWifiManager.isWifiEnabled()) {
wFOperateEnum = WFOperateEnum.CREATE;
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;
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))) {
wFOperateEnum = WFOperateEnum.CLOSE;
m_LinearLDialog.setVisibility(View.VISIBLE);
m_textVContentDialog.setText(
"关闭热点会中断当前传输,您确定这么做?"
);
return
;
}
if
(m_wtSearchProcess.running) {
m_wtSearchProcess.stop();
m_FrameLWTSearchAnimation.stopAnimation();
}
/******************点击创建热点时没有连接wifi或热点的情况*****************************/
m_wiFiAdmin.closeWifi();
m_wiFiAdmin.createWifiAP(m_wiFiAdmin.createWifiInfo(WIFI_AP_HEADER + getLocalHostName(), WIFI_AP_PASSWORD,
3
,
"ap"
),
true
);
m_createAPProcess.start();
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) {
case
WFOperateEnum.CLOSE:
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:
if
(m_wtSearchProcess.running) {
m_wtSearchProcess.stop();
m_FrameLWTSearchAnimation.stopAnimation();
}
m_wiFiAdmin.closeWifi();
m_wiFiAdmin.createWifiAP(m_wiFiAdmin.createWifiInfo(WIFI_AP_HEADER + getLocalHostName(), WIFI_AP_PASSWORD,
3
,
"ap"
),
true
);
m_createAPProcess.start();
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
);
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);
}
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
;
}
if
(!isWifiConnect() && !getWifiApState()) {
m_wiFiAdmin.OpenWifi();
m_wtSearchProcess.start();
m_wiFiAdmin.startScan();
m_FrameLWTSearchAnimation.startAnimation();
m_textVWTPrompt.setVisibility(View.VISIBLE);
m_textVWTPrompt.setText(
" 正在搜索附近的热点..."
);
m_linearLCreateAP.setVisibility(View.GONE);
m_btnCreateWF.setBackgroundResource(R.drawable.x_wt_create);
}
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++) {
if
(m_wiFiAdmin.mWifiManager.getScanResults().get(i).SSID.startsWith(WIFI_AP_HEADER)) {
m_listWifi.add(m_wiFiAdmin.mWifiManager.getScanResults().get(i));
}
}
m_wTAdapter.setData(m_listWifi);
m_wTAdapter.notifyDataSetChanged();
}
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() {
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();
}
}