异步处理(Handler)线程(Thread&Runnable)定时器(Timer)Wifi管理(WifiManager&WifiInfo)

来源:互联网 发布:urllib post json 编辑:程序博客网 时间:2024/06/08 05:32

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() {        @Override        public void run() {            updateUI();        }    };    @Override    protected 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);在主线程中更新UI        new 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() {            @Override            public 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");    }    @Override    protected 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);//使能wifi            closewifi=true;            try{//进行线程操作时需要捕获InterruptedException异常                Thread.sleep(10000);//当前线程休眠10秒            }catch (InterruptedException e){                e.printStackTrace();            }        }        //WifiManager的操作需要权限android.permission.CHANGE_WIFI_STATE        wifiInfo=mWifiManager.getConnectionInfo();        if(wifiInfo==null){            try{                timer=new Timer();                TimerTask task=new TimerTask() {                    @Override                    public 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);        }    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.e("wifi","ondestroy begin");        if(closewifi){            mWifiManager.setWifiEnabled(false);        }    }}



0 0
原创粉丝点击