问题 - 在定位API 24+时注册连接更改
并非所有Android广播都是平等创建的,并且在所有情况下都无法在清单中创建它们。由于Google对针对N(API 24)的应用所做的更改,您必须在运行时配置一些内容。
从文档中:针对Android 7.0(API级别24)及更高版本的应用程序CONNECTIVITY_ACTION
如果在清单中声明其广播接收器,则不会接收广播。
解决方案
文档并不清楚如何处理这个问题,因此这里的代码允许您的应用在定位N或更高版本后仍然接收连接更改广播:
隐藏 复制代码
public void onCreate() {
...
//Change 'YourConnectionChangedBroadcastReceiver'
//to the class defined to handle the broadcast in your app
registerReceiver(new YourConnectionChangedBroadcastReceiver(),
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
...
}
我还建议从AndroidManifest.xml中删除声明,就好像你把它留在那里一样,它实际上会创建你的广播接收器的多个实例。
隐藏 复制代码
<receiver android:name="YourConnectionChangedBroadcastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
以编程方式注册可以解锁接收器以供您的应用程序使用(包括CONNECTIVITY_ACTION
清单中的那些),这就是它的全部内容。您可以保存已注册的接收器实例,并在不再需要时注销它,但是,如果它持续应用程序的整个生命周期,则不需要这样做。