2017-08-01 3 views
0

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)?

Répondre

1

Vous avez probablement besoin d'ajouter votre application à la liste des applications «protégées», ou la liste des applications qui peuvent fonctionner en arrière-plan. Sur de nombreux appareils bas de gamme, et des appareils de Xiaomi, Huawei, etc. Android ne démarrera pas (ou ne redémarrera pas) les applications à moins qu'elles n'aient été explicitement ajoutées à cette liste. Regardez dans Paramètres sous Batterie, Gestion de l'alimentation ou Sécurité.

Voir les éléments suivants pour plus d'informations:

+0

Merci. Cela a fonctionné pour certains appareils Huawei, mais Huawei GR5 2017 n'a pas cette fonctionnalité "applications protégées". – kmchmk

+0

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

+0

Aïe! :-(Ce n'est pas intuitif! –