J'essaie d'obtenir un événement de changement de connexion WiFi en utilisant la classe Broadcast Receiver. Je l'ai testé sur Samsung S7 edge et HTC 626Q et ça marche bien (même lorsque l'application est fermée), mais cela ne fonctionne pas sur Huawei GR5 2017 si l'application est fermée. Cela ne fonctionne que lorsque l'application est en cours d'exécution à l'écran. Les appareils S7 et GR5 ont un système d'exploitation Android 7 (Nougat).Le récepteur de diffusion ne fonctionne pas en arrière-plan sur certains périphériques
Diffusion récepteur
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,intent.getAction(),Toast.LENGTH_SHORT).show();
}
}
fichier AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="chanakamadurangakarunarathne.testbroadcastevents">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".NetworkChangeReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.nsd.STATE_CHANGED" />
<action android:name="android.net.wifi.NETWORK_IDS_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.p2p.CONNECTION_STATE_CHANGE" />
<action android:name="android.net.wifi.p2p.DISCOVERY_STATE_CHANGE" />
<action android:name="android.net.wifi.p2p.PEERS_CHANGED" />
<action android:name="android.net.wifi.p2p.STATE_CHANGED" />
<action android:name="android.net.wifi.p2p.THIS_DEVICE_CHANGED" />
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
<action android:name="android.net.wifi.supplicant.STATE_CHANGE" />
</intent-filter>
</receiver>
</application>
</manifest>
Je sais que je peux utiliser les services, mais ce serait bien si je peux utiliser le récepteur de diffusion pour tous les appareils. J'ai trouvé beaucoup de questions à propos de "Broadcast Receiver not working background" mais je n'ai pas trouvé de réponse à ma question. Pourquoi cela se produit-il et y a-t-il un moyen de surmonter cela (Utilisation du récepteur de diffusion uniquement)?
Merci. Cela a fonctionné pour certains appareils Huawei, mais Huawei GR5 2017 n'a pas cette fonctionnalité "applications protégées". – kmchmk
J'ai finalement trouvé un moyen de résoudre ce problème pour le modèle Huawei GR5 2017 (Nougat). Paramètres -> Applications -> Paramètres icône -> Accès spécial -> Ignorer les optimisations -> Toutes les applications -> (Sélectionnez l'application) -> Autoriser – kmchmk
Aïe! :-(Ce n'est pas intuitif! –