Broadcast receiver not working background on some devices

别来无恙 提交于 2019-12-22 00:49:23

问题


I am trying to get WiFi connection changing event using Broadcast Receiver class. I have tested this on Samsung S7 edge and HTC 626Q and it works well (even when the app is closed), but this is not working on Huawei GR5 2017 if the app is closed. It works only when the app is running on screen. Both S7 and GR5 devices have Android 7 (Nougat) OS.

Broadcast Receiver

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,intent.getAction(),Toast.LENGTH_SHORT).show();
    }
}

AndroidManifest file

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

I know I can use Services, but It would be nice if I can use Broadcast Receiver for all devices. I found a lot of questions about "Broadcast Receiver not working background" but I couldn't find an answer for my question. Why this happens and is there a way to overcome this (Using Broadcast Receiver only)?


回答1:


You probably need to add your app to the list of "protected" apps, or the list of apps that are allowed to run in the background. On many low-end devices, and devices from Xiaomi, Huawei, etc. Android will not start (or restart) apps automatically unless they have been explicitly added to this list. Look in Settings under Battery, Power Management or Security.

See the following for more info:

  • BroadcastReceiver works for a while, then stops
  • "Protected Apps" setting on Huawei phones, and how to handle it


来源:https://stackoverflow.com/questions/45448174/broadcast-receiver-not-working-background-on-some-devices

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!