1 public class MainActivity extends Activity { 2 private NetworkChangeReceiver receiver; 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 IntentFilter intentFilter = new IntentFilter(); 10 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); 11 12 receiver = new NetworkChangeReceiver(); 13 registerReceiver(receiver, intentFilter); 14 } 15 16 @Override 17 protected void onDestroy() { 18 unregisterReceiver(receiver);//remember to unregister manually 19 super.onDestroy(); 20 } 21 }
2. 定义receiver的行为:继承BroadcastReceiver并在覆写onReceiver()时定义好接收到广播时处理的逻辑:
1 public class NetworkChangeReceiver extends BroadcastReceiver { 2 @Override 3 public void onReceive(Context context, Intent intent) { 4 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 5 NetworkInfo networkInfo = manager.getActiveNetworkInfo(); 6 if(networkInfo != null && networkInfo.isAvailable()) 7 Toast.makeText(context, "Network is available.", Toast.LENGTH_SHORT).show(); 8 else 9 Toast.makeText(context, "Network is unavailable.", Toast.LENGTH_SHORT).show(); 10 } 11 }
3. 在AndroidManifest.xml中定义必要的权限,主要<uses-permission>标签位于<manifest>的下一级,即与<application>同级:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
1 public class BootCompleteReceiver extends BroadcastReceiver { 2 @Override 3 public void onReceive(Context context, Intent intent) { 4 Toast.makeText(context, "Boot complete.", Toast.LENGTH_LONG).show(); 5 } 6 }
2. 在AndroidManifest.xml中定义receiver(与<activity>同级,<application>的子元素):
1 <receiver android:name=".MyBroadcast"> 2 <intent-filter android:priority="100"> 3 <action android:name="com.scv.lawrence.MY_BROADCAST"/> 4 </intent-filter> 5 </receiver>
3. 在AndroidManifest.xml中添加相应权限(<application>同级,<manifest>的子元素):
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
在代码中发送自定义的标准/无序广播:
1 Button sendBroadcast = (Button) findViewById(R.id.broadcast); 2 sendBroadcast.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 Intent intent = new Intent("com.scv.lawrence.MY_BROADCAST"); 6 sendBroadcast(intent); 7 // sendOrderedBroadcast(intent, null); 8 } 9 });
在AndroidManifest.xml中定义(父元素为<application>,即与<activity>同级):
1 <receiver android:name=".MyBroadcast"> 2 <intent-filter android:priority="100"> 3 <action android:name="com.scv.lawrence.MY_BROADCAST"/> 4 </intent-filter> 5 </receiver>
1 public class LocalBroadcastReceiver extends BroadcastReceiver { 2 @Override 3 public void onReceive(Context context, Intent intent) { 4 Toast.makeText(context, "Get the local broadcast.", Toast.LENGTH_SHORT).show(); 5 } 6 }
2. 和动态广播差不多,区别主要在使用LocalBroadcastManager的实例来进行操作:
1 public class MainActivity extends Activity { 2 private LocalBroadcastManager localBroadcastManager; 3 private LocalBroadcastReceiver localReceiver; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 //Local Broadcast 11 localBroadcastManager = LocalBroadcastManager.getInstance(MainActivity.this); 12 13 final Button localBroadcast = (Button) findViewById(R.id.local_broadcast); 14 localBroadcast.setOnClickListener(new View.OnClickListener() { 15 @Override 16 public void onClick(View v) { 17 Intent intent = new Intent("com.scv.lawrence.LOCAL_BROADCAST"); 18 localBroadcastManager.sendBroadcast(intent); 19 } 20 }); 21 22 IntentFilter localIntentFilter = new IntentFilter(); 23 localIntentFilter.addAction("com.scv.lawrence.LOCAL_BROADCAST"); 24 25 localReceiver = new LocalBroadcastReceiver(); 26 localBroadcastManager.registerReceiver(localReceiver, localIntentFilter); 27 } 28 29 @Override 30 protected void onDestroy() { 31 localBroadcastManager.unregisterReceiver(localReceiver); 32 super.onDestroy(); 33 } 34 }
3. 在AndroidManifest.xml中配置permission. (如有必要)
《第一行笔记:Android》:BroadcastReceiver
原文:http://www.cnblogs.com/lawrencechen/p/4835806.html