一、静态注册的广播接收器
-
AndroidManifest.xml
<receiver android:name=".TestBroadcastReceiver"> <intent-filter> <action android:name="com.tomorrow.intent.action.test"/> </intent-filter> </receiver>
-
TestBroadcastReceiver
public class TestBroadcastReceiver extends BroadcastReceiver { private static final String TAG = TestBroadcastReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, String.format("zwm, onReceive, action: %s", intent.getAction())); } }
-
MainActivity
public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "zwm, onCreate"); Intent intent = new Intent(); intent.setAction("com.tomorrow.intent.action.test"); //注意:需要添加以下语句,静态注册的广播接收器才能接收到广播 intent.setPackage(getPackageName()); sendBroadcast(intent); } }
-
打印日志
2020-03-25 19:16:30.702 14517-14517/com.tomorrow.architetest D/MainActivity: zwm, onCreate 2020-03-25 19:16:30.733 14517-14517/com.tomorrow.architetest D/TestBroadcastReceiver: zwm, onReceive, action: com.tomorrow.intent.action.test
二、动态注册的广播接收器
-
AndroidManifest.xml
//不需要注册
-
TestBroadcastReceiver
public class TestBroadcastReceiver extends BroadcastReceiver { private static final String TAG = TestBroadcastReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, String.format("zwm, onReceive, action: %s", intent.getAction())); } }
-
MainActivity
public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private TestBroadcastReceiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "zwm, onCreate"); mReceiver = new TestBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.tomorrow.intent.action.test"); registerReceiver(mReceiver, intentFilter); new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(); intent.setAction("com.tomorrow.intent.action.test"); sendBroadcast(intent); } }, 3000); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "zwm, onDestroy"); unregisterReceiver(mReceiver); } }
-
打印日志
2020-03-25 19:34:57.226 16185-16185/com.tomorrow.architetest D/MainActivity: zwm, onCreate 2020-03-25 19:35:00.242 16185-16185/com.tomorrow.architetest D/TestBroadcastReceiver: zwm, onReceive, action: com.tomorrow.intent.action.test
三、使用本地广播动态注册的广播接收器
-
AndroidManifest.xml
//不需要注册
-
TestBroadcastReceiver
public class TestBroadcastReceiver extends BroadcastReceiver { private static final String TAG = TestBroadcastReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, String.format("zwm, onReceive, action: %s", intent.getAction())); } }
-
MainActivity
public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private LocalBroadcastManager mLocalBroadcastManager; private TestBroadcastReceiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "zwm, onCreate"); mLocalBroadcastManager = LocalBroadcastManager.getInstance(getApplicationContext()); mReceiver = new TestBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.tomorrow.intent.action.test"); mLocalBroadcastManager.registerReceiver(mReceiver, intentFilter); new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(); intent.setAction("com.tomorrow.intent.action.test"); mLocalBroadcastManager.sendBroadcast(intent); } }, 3000); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "zwm, onDestroy"); mLocalBroadcastManager.unregisterReceiver(mReceiver); } }
-
打印日志
2020-03-25 20:02:37.409 20817-20817/com.tomorrow.architetest D/MainActivity: zwm, onCreate 2020-03-25 20:02:40.417 20817-20817/com.tomorrow.architetest D/TestBroadcastReceiver: zwm, onReceive, action: com.tomorrow.intent.action.test
网友评论