#android-intent #android-service #android-background
#android-намерение #android-сервис #android-фон
Вопрос:
Я пытаюсь запустить приложение в фоновом режиме, которое сообщает мне, когда статус Wi-Fi изменен;
public class BackgroundJobs extends Service {
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("BACKJOBS", "here we are");
wifiInfo wifiHandler = new wifiInfo(this);
// wifistatus checks if wifi is on or off, returning a boolean
if(wifiHandler.wifiStatus())
Log.i("BACKJOBS", "WIFI ON");
else
Log.i("BACKJOBS", "WIFI OFF");
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
//TODO for communication return IBinder implementation
return null;
}
}
В моем MainActivity я запускаю службу следующим образом:
startService(new Intent(this, BackgroundJobs.class));
и в AndroidManifest.xml:
<service android:name=".gestioneServizi.BackgroundJobs"/>
Я запускаю свое приложение, возвращаюсь к себе домой, нажимая кнопку «Домой», включаю или выключаю Wi-Fi, но я не вижу журналов «BACKJOBS».
Я что-то недопонимаю или я работаю с неправильным методом?
Ответ №1:
В этом случае вам следует использовать BroadcastReceiver.
Манифест:
<receiver android:name="com.app.receiver.ConnectionReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
</intent-filter>
</receiver>
Приемник:
public class ConnectionReceiver extends BroadcastReceiver {
private static String lastActiveNetworkName = null;
private ConnectivityManager connectivityManager;
private NetworkInfo wifiInfo;
@Override
public void onReceive(final Context context, Intent intent) {
try {
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo network = connectivityManager.getActiveNetworkInfo();
if (network != null) {
String networkName = network.getTypeName();
if (!networkName.equals(lastActiveNetworkName)) {
lastActiveNetworkName = networkName;
} else {
Log.d(TAG, "Network equals lastnetwork:" lastActiveNetworkName);
}
}
if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (networkInfo.isConnected()) {
Log.d(TAG, "Wifi is connected: " String.valueOf(networkInfo));
}
} else if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI amp;amp; !networkInfo.isConnected()) {
Log.d(TAG, "Wifi is disconnected: " String.valueOf(networkInfo));
}
}
}