美文网首页
接受系统广播

接受系统广播

作者: TTTqiu | 来源:发表于2016-04-22 15:09 被阅读30次
广播接收器:

新建一个类,让它继承自 BroadcastReceiver,并重写父类的 onReceive() 方法就行了。这样当有广播到来时,onReceive() 方法就会得到执行,具体的逻辑就可以在这个方法中处理。

一、动态注册监听网络变化


public class MainActivity extends Activity {
    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
        }
    }
}
1. 创建 IntentFilter 实例,添加相应 action。
2. 写好 Receiver,创建 Receiver 实例。
3. 调过 registerReceiver() 注册。
4. 通过 unregisterReceiver() 取消注册。

二、静态注册实现开机启动


  • 动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势。
  • 但是它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在 onCreate( )方法中的。
  • 静态注册的方式可以在程序未启动时接收广播。
修改 AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcasttest"
    android:versionCode="1"
    android:versionName="1.0" >
......
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
......
        <receiver android:name=".BootCompleteReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
        </receiver>

    </application>
</manifest>
        <receiver android:name=".BootCompleteReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
        </receiver>

注意:

不要在 onReceive() 方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收器中是不允许开启线程的,当 onReceive() 方法运行了较长时间而没有结束时,程序就会报错。因此广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知,或者启动一个服务等。

相关文章

  • 接受系统广播

    广播接收器: 新建一个类,让它继承自 BroadcastReceiver,并重写父类的 onReceive() 方...

  • Broadcast广播的基本使用

    全局广播:在整个Android系统中应用不但可以接受自己的广播,也可以接受别的应用的广播,或则系统的广播(开机广播...

  • Android BroadcastReceiver(广播接收器)

    安卓应用程序可以注册广播接收器来接受系统广播(如网络变化、系统启动、电池电量低等都会发出广播),或者接受其他应用程...

  • Android手机电池管理

    安卓系统通过广播来接受电池状态,下面是我写的一个简单电池管理项目。 广播接受类BatteryReceiver如下:...

  • 【Android】Android中广播的基本使用

    接受系统广播 动态注册 在Java代码中指定IntentFilter,然后想监听什么广播就添加对应的Action。...

  • Android中的广播

    Android中的广播 广播接受器,可以比喻成收音机。而广播则可以看成电台。 Android系统内部相当于已经有一...

  • Android开机自启动

    1.加入权限 2.定义广播 用于我们接受到系统发送的开机广播后,APP要去的处理… 3.注册广播 AndroidM...

  • BroadcastReceiver

    接受信息并做出对应处理 注册方式:静态广播(app在非运行状态下接受系统通知)和动态广播(运行状态下组件间的通信)...

  • Broadcast全解

    Android系统的app可以从系统或者其他app发送或者接受广播消息。类似于(发布-订阅模式)。 app可以注册...

  • BroadcastReceiver

    1.分类 普通广播范围:整个系统 系统广播范围:整个系统 有序广播范围:整个系统 本地广播(Local Broad...

网友评论

      本文标题:接受系统广播

      本文链接:https://www.haomeiwen.com/subject/ohlxrttx.html