首页

源码搜藏网

首页 > 安卓源码 > 技术博客 >

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

创建时间:2018-08-09 15:38  浏览

问题 - 在定位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 编写一个简单的大声朗读您的短信应用程序
下一篇:分享如何在Android中使用JSON-Java解析JSON

相关内容

热门推荐