framework:
1. getSystemService(Context.WIFI_SERVICE)
mWifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
2. AsyncChannel
private synchronized AsyncChannel getChannel() {
if (mAsyncChannel == null) {
Messenger messenger = getWifiServiceMessenger();
if (messenger == null) {
throw new IllegalStateException(
"getWifiServiceMessenger() returned null! This is invalid.");
}
mAsyncChannel = new AsyncChannel();
mConnected = new CountDownLatch(1);
Handler handler = new ServiceHandler(mLooper);
mAsyncChannel.connect(mContext, handler, messenger);
try {
mConnected.await();
} catch (InterruptedException e) {
Log.e(TAG, "interrupted wait at init");
}
}
return mAsyncChannel;
}
关键的类:
WifiService.java ----WifiServiceImpl.java
WifiControl.java
WifiStateMashin.java
WifiServiceImpl中关键技术点:
AsyncTask:
class TdlsTask extends AsyncTask<TdlsTaskParams, Integer, Integer> {
new TdlsTask().execute(params);
Handler:
private class ClientHandler extends Handler {
private class WifiStateMachineHandler extends Handler {
HandlerThread:
HandlerThread wifiThread = new HandlerThread("WifiService");
wifiThread.start();
HandlerThread wifiStateMachineThread = new HandlerThread("WifiStateMachine");
wifiStateMachineThread.start();
可参考:
AsyncChannel的使用和原理