所以有人让我为他写一个应用程序,当他连接到WiFi接入点时,日志开始和停止,bssid,本地ip,ssid和开始/停止时间。
我是这样做的:
public void onReceive(Context context, Intent intent) {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if (mWifi.isConnected()) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
android.net.wifi.WifiInfo wifiInfo = wifiManager
.getConnectionInfo();
SSID = wifiInfo.getSSID();
BSSID = wifiInfo.getBSSID();
localIp = getLocalIpAddress();
Log.d("WIFI SSID",SSID);
Log.d("WIFI MAC", BSSID);
Log.d("WIFI IP", localIp);
this.startDate = c.getTime();
}
while(mWifi.isConnected()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.stopDate = c.getTime();
db.insertWifiInfo(SSID, BSSID,telephonyManager.getDeviceId(), localIp, startDate, stopDate);
}
此方法由此intent过滤器调用:
<intent-filter>
<action android:name="android.net.wifi.WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION" >
</action>
</intent-filter>
然而,这是能够记录开始和停止时间的最佳方法吗?等待()效率低下吗?
答案 0 :(得分:0)
等待()效率低吗?
是的,这完全没错。
阅读android中的BroadcastReceiver。以下是您需要做的事情:
protected void onResume()
{
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
registerReceiver(myReceiver, intentFilter);
}
private BroadcastReceiver myReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String str = intent.getAction();
displayMessage("In myReceiver, action = " + str);
Log.d("Settings", "Received action: " + str);
if (str.equals("android.net.wifi.WIFI_STATE_CHANGED"))
displayMessage("wifi changed...");
}};
答案 1 :(得分:0)
为什么要这样做while(connected){wait}
呢?我想你会再收到SUPPLICANT_CONNECTION_CHANGE_ACTION
的广播:
广播意图动作,指示已建立与请求方的连接(现在可以执行Wi-Fi操作)或与请求方的连接已丢失。一个额外提供连接状态作为布尔值,其中true表示连接。
您可以每次检查额外的内容,看看您是否已启动或停止连接。这样你的应用甚至不必在开始和停止之间运行。