时光不知不觉在指尖划过,造化弄人,如今又重新开始学习Android。今天主要学习Broadcast Receiver用法,记录一下自己的学习过程。
广播的注册方式分为动态注册和静态注册。
1、动态注册
1)主MainActivity中先定义一个NetworkChangeReceiver 继承BroadcastReceiver,并复写onReceive()方法,然后创建intentFilter 和networkChangeReceiver对象,通过registerReceiver()注册广播
package com.example.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends AppCompatActivity { 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) { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if(null!= networkInfo && networkInfo.isAvailable()){ Toast.makeText(MainActivity.this, "network is available!", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(MainActivity.this, "network is unavailable!", Toast.LENGTH_SHORT).show(); } } } }在Manifest.xml文件添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />在模拟器(或android手机)中更改数据网络方式(打开或禁用),效果如下
2、静态注册
package com.example.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Boot Complete!", Toast.LENGTH_LONG).show(); throw new UnsupportedOperationException("Not yet implemented"); } }在Manifest.xml文件添加intent-filter及相应权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <receiver android:name=".BootCompleteReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>系统广播
重启模拟器或手机,即可
3、自定义广播
package com.example.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Toast.makeText(context, "received in MyBroadcastReceiver!", Toast.LENGTH_LONG).show(); } }在Manifest.xml文件注册广播添加intent-filter
<receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter> </receiver>在主MainActivity中添加button用来发送广播(在布局文件中添加一个button)
Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); sendBroadcast(intent); } });显示效果:
