异步处理(Handler)线程(ThreadRunnable)定时器(Timer)Wifi管理(WifiManagerWifiInfo)

本文主要是介绍异步处理(Handler)线程(ThreadRunnable)定时器(Timer)Wifi管理(WifiManagerWifiInfo),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Handler.post(Runnable)方法的执行原理:http://blog.csdn.net/vampire0072009/article/details/43273375


Java中Runnable和Thread的区别:http://developer.51cto.com/art/201203/321042.htm


定时任务:Java中Timer和TimerTask的使用 :http://batitan.iteye.com/blog/253483


java.util.Timer浅析:http://www.cnblogs.com/jinspire/archive/2012/02/10/2345256.html


WifiManager解析:http://blog.csdn.net/hb8676086/article/details/50929953


代码分析

import android.app.Activity;
import android.content.Intent;
import android.net.wifi.ScanResult;
import android.os.Bundle;
import android.util.Log;
import com.android.internal.telephony.Phone;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import android.content.Context;
import android.content.res.Resources;import android.view.Window;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.net.wifi.WifiInfo;import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import java.util.List;
import java.util.concurrent.Exchanger;import android.os.SystemProperties;public class WifiMAC extends EmActivity {Button okButton;TextView mContent;View btn_pass;String wifimac="waiting...";Button scan;boolean closewifi=false;WifiInfo wifiInfo=null;int i=0;Timer timer=null;private WifiManager mWifiManager;private static final String LOG_TAG="EMODE_WIFIMAC";private boolean DBG=true;protected void log(String msg){if(DBG) Log.e(LOG_TAG,msg);}final Handler mHandler=new Handler();//这个Handler对象在主线程中进行UI更新//这里虽然重写了接口Runnable的run方法但是并没有开启新线程,// 这个对象将会通过调用Handler.post(Runnable)方法,在主线程中执行updateUI操作final Runnable mUpdateResults=new Runnable() {@Overridepublic void run() {updateUI();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.em_wifimac);mContent=(TextView)findViewById(R.id.imei_content);mContent.setText(getString(R.string.wifi_mac)+wifimac);//开启一个新线程用来获取wifiMAC地址,因为WIFI的启动比较耗时,最好放到非主线程中执行//这里通过mHandler.postDelayed(mUpadateResults,5000);在主线程中更新UInew Thread(){public void run(){getWifiMAC();mHandler.postDelayed(mUpdateResults,5000);}}.start();scan=(Button)findViewById(R.id.scan);scan.setText(R.string.btn_text_scan);scan.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent();intent.setAction("android.settings.WIFI_SETTINGS");//打开系统wifi设置页面startActivity(intent);}});scan.setVisibility(View.GONE);okButton=(Button)findViewById(R.id.Button01);okButton.setOnClickListener(new Button.OnClickListener(){public void onClick(View v){finish();//结束活动}});okButton.setText("OK");}@Overrideprotected void onResume() {if(btn_pass==null){View dv=getWindow().getDecorView();btn_pass=dv.findViewById(R.id.btn_succ);btn_pass.setVisibility(View.GONE);}super.onResume();}void getWifiMAC(){mWifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);if(!mWifiManager.isWifiEnabled()){//如果WIFI不使能mWifiManager.setWifiEnabled(true);//使能wificlosewifi=true;try{//进行线程操作时需要捕获InterruptedException异常Thread.sleep(10000);//当前线程休眠10秒}catch (InterruptedException e){e.printStackTrace();}}//WifiManager的操作需要权限android.permission.CHANGE_WIFI_STATEwifiInfo=mWifiManager.getConnectionInfo();if(wifiInfo==null){try{timer=new Timer();TimerTask task=new TimerTask() {@Overridepublic void run() {try{Thread.sleep(1000);//当前线程休眠1秒wifiInfo=mWifiManager.getConnectionInfo();//获取wifi信息,需要权限i++;}catch (Exception e){e.printStackTrace();}}};timer.schedule(task,1000);//TimerTask又开启了一个新线程获取wifi信息}catch (Exception e){e.printStackTrace();}if(wifiInfo==null && i>5){//如果获取五次wifi信息后信息仍为空timer.cancel();//取消定时器任务wifimac=getString(R.string.unknow);}if(wifiInfo!=null){wifimac=wifiInfo.getMacAddress();timer.cancel();}}else{wifimac=wifiInfo.getMacAddress();}}private void updateUI(){mContent.setText(getString(R.string.wifi_mac)+wifimac);List<ScanResult> list=mWifiManager.getScanResults();int size=list.size();TextView tv_list=(TextView)findViewById(R.id.device_list);for(int i=0;i<size;i++){tv_list.append(list.get(i).SSID+"\n");}if(size>0){if(btn_pass==null){View dv=getWindow().getDecorView();btn_pass=dv.findViewById(R.id.btn_succ);}btn_pass.setVisibility(View.VISIBLE);}}@Overrideprotected void onDestroy() {super.onDestroy();Log.e("wifi","ondestroy begin");if(closewifi){mWifiManager.setWifiEnabled(false);}}
}



这篇关于异步处理(Handler)线程(ThreadRunnable)定时器(Timer)Wifi管理(WifiManagerWifiInfo)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099313

相关文章

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

线程池ThreadPoolExecutor应用过程

《线程池ThreadPoolExecutor应用过程》:本文主要介绍如何使用ThreadPoolExecutor创建线程池,包括其构造方法、常用方法、参数校验以及如何选择合适的拒绝策略,文章还讨论... 目录ThreadPoolExecutor构造说明及常用方法为什么强制要求使用ThreadPoolExec

Java线程池核心参数原理及使用指南

《Java线程池核心参数原理及使用指南》本文详细介绍了Java线程池的基本概念、核心类、核心参数、工作原理、常见类型以及最佳实践,通过理解每个参数的含义和工作原理,可以更好地配置线程池,提高系统性能,... 目录一、线程池概述1.1 什么是线程池1.2 线程池的优势二、线程池核心类三、ThreadPoolE

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr