Я собираюсь создать приложение для Android, которое записывает все, что происходит с адаптерами WiFi для устройств. Например, включение/выключение WiFi, подключение к устройству/выход из диапазона WiFi-маршрутизатора и т. Д. Мое приложение должно иметь возможность записывать эти события сразу после включения устройства. Очистка приложения от RECENTS не должна влиять на способность приложения записывать эти события. Я прошел через BroadcastReceiver. Он привязан к жизненному циклу приложения и, следовательно, не будет записывать события после того, как приложение очистится от RECENTS.Уведомление об изменении состояния WiFi на устройстве Android?
public class MainActivity extends Activity {
BroadcastReceiver mybroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mybroadcastReceiver = new WifiBroadcastReceiver(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
registerReceiver(mybroadcastReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mybroadcastReceiver);
}
}
public class WifiBroadcastReceiver extends BroadcastReceiver {
final String TAG = "WifiBroadcastReceiver";
final String desiredMacAddress = "02:17:1c:96:42:fa";
Activity activity;
WifiBroadcastReceiver(Activity activity) {
this.activity = activity;
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
SupplicantState state = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
if (SupplicantState.isValidState(state) && state == SupplicantState.COMPLETED)
checkConnectedToDesiredWifi();
}
}
/** Detect you are connected to a specific network. */
private void checkConnectedToDesiredWifi() {
WifiManager myWifiManager = (WifiManager)activity.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = myWifiManager.getConnectionInfo();
if (wifiInfo != null) {
// get current router MAC address
String bssid = wifiInfo.getBSSID();
if (desiredMacAddress.equals(bssid))
Log.d(TAG, "Connected to " + bssid + " i.e., desiredMacAddress");
else
Log.d(TAG, "Connected to " + bssid + " not " + desiredMacAddress);
}
}
}
Будет ли это просыпаться в приложении, даже если я закрою приложение или прикрою приложение во время изменения состояния сети? @charlie – Sp4Rx
Это должно позволить вашему приложению «разбудить» onReceive() намерения в вашем BroadcastReceiver даже после закрытия всех видов деятельности. Если вы выбрали, например, вы могли бы начать действие onReceive .. поэтому имитировать приложение «просыпаться», – Charlie