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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api