当前位置:首页 > 安卓源码 > 技术博客 >

如何在Android中以编程方式在运行时注册系统广播接收器

时间:2018-08-09 15:38 来源:互联网 作者:源码搜藏 浏览: 收藏 挑错 推荐 打印

问题 - 在定位API 24+时注册连接更改 并非所有Android广播都是平等创建的,并且在所有情况下都无法在清单中创建它们。 由于Google对针对N(API 24)的应用所做的更改,您必须在运行时配置一些内容。 从 文档中 :针对Android 7.0(API级别24)及更高版本的应

问题 - 在定位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清单中的那些),这就是它的全部内容。您可以保存已注册的接收器实例,并在不再需要时注销它,但是,如果它持续应用程序的整个生命周期,则不需要这样做。

如何在Android中以编程方式在运行时注册系统广播接收器 转载https://www.codesocang.com/appboke/38813.html

技术博客阅读排行

最新文章