简述

把工具类从广播知识点中抽离出来,可以更方便的帮助使用广播,同时加入安全相关的广播LocalBroadcastManager,更加灵活方便使用。

api

  1. registerBroadcastK :注册广播
  2. unregisterBroadcastK:解除注册
  3. sendBroadcastK :发送广播

源码

  1. public class BroadcastUtils {
  2. /**
  3. * 注册广播
  4. *
  5. * @param broadcastReceiver
  6. * @param action
  7. */
  8. public static void registerBroadcast(BroadcastReceiver broadcastReceiver, String... action) {
  9. registerBroadcast(PublicUtils.getContext(), broadcastReceiver, action);
  10. }
  11. /**
  12. * 注册广播
  13. *
  14. * @param context
  15. * @param broadcastReceiver
  16. * @param action
  17. */
  18. public static void registerBroadcast(Context context, BroadcastReceiver broadcastReceiver, String... action) {
  19. if (context == null || broadcastReceiver == null) return;
  20. IntentFilter intentFilter = new IntentFilter();
  21. for (String s : action) {
  22. intentFilter.addAction(s);
  23. }
  24. LocalBroadcastManager.getInstance(context).registerReceiver(broadcastReceiver, intentFilter);
  25. // context.registerReceiver(broadcastReceiver, intentFilter);
  26. }
  27. /**
  28. * 解除注册广播,广播要和注册时是同一个
  29. *
  30. * @param broadcastReceiver
  31. */
  32. public static void unregisterBroadcast(BroadcastReceiver broadcastReceiver) {
  33. unregisterBroadcast(PublicUtils.getContext(), broadcastReceiver);
  34. }
  35. /**
  36. * 解除注册广播,广播要和注册时是同一个
  37. *
  38. * @param context
  39. * @param broadcastReceiver
  40. */
  41. public static void unregisterBroadcast(Context context, BroadcastReceiver broadcastReceiver) {
  42. if (context == null || broadcastReceiver == null) return;
  43. LocalBroadcastManager.getInstance(context).unregisterReceiver(broadcastReceiver);
  44. // context.unregisterReceiver(broadcastReceiver);
  45. }
  46. /**
  47. * 发送广播
  48. *
  49. * @param action
  50. */
  51. @SafeVarargs
  52. public static void sendBroadcast(String action, Pair<String, String>... pairs) {
  53. sendBroadcast(PublicUtils.getContext(), action, pairs);
  54. }
  55. /**
  56. * 发送广播
  57. *
  58. * @param context
  59. * @param action
  60. */
  61. @SafeVarargs
  62. public static <T> void sendBroadcast(Context context, String action, Pair<String, T>... pairs) {
  63. if (context == null || TextUtils.isEmpty(action)) return;
  64. Intent intent = new Intent(action);
  65. if (pairs != null && pairs.length != 0) {
  66. T second;
  67. for (Pair<String, T> pair : pairs) {
  68. second = pair.second;
  69. if (second instanceof String) {
  70. intent.putExtra(pair.first, (String) second);
  71. } else if (second instanceof Integer) {
  72. intent.putExtra(pair.first, (Integer) second);
  73. } else if (second instanceof Long) {
  74. intent.putExtra(pair.first, (Long) second);
  75. } else if (second instanceof Double) {
  76. intent.putExtra(pair.first, (Double) second);
  77. } else if (second instanceof Serializable) {
  78. intent.putExtra(pair.first, (Serializable) second);
  79. }
  80. }
  81. }
  82. LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
  83. // context.sendBroadcast(intent);
  84. }
  85. }

参考

Android LocalBroadcastManager 的使用总结