异步处理(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

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp