美文网首页
广播 -- Demo

广播 -- Demo

作者: TomyZhang | 来源:发表于2020-05-24 16:37 被阅读0次

一、静态注册的广播接收器

  1. AndroidManifest.xml

    <receiver android:name=".TestBroadcastReceiver">
        <intent-filter>
            <action android:name="com.tomorrow.intent.action.test"/>
        </intent-filter>
    </receiver>
    
  2. 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()));
        }
    }
    
  3. 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);
        }
    }
    
  4. 打印日志

    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
    

二、动态注册的广播接收器

  1. AndroidManifest.xml

    //不需要注册
    
  2. 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()));
        }
    }
    
  3. 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);
        }
    }
    
  4. 打印日志

    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
    

三、使用本地广播动态注册的广播接收器

  1. AndroidManifest.xml

    //不需要注册
    
  2. 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()));
        }
    }
    
  3. 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);
        }
    }
    
  4. 打印日志

    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
    

相关文章

网友评论

      本文标题:广播 -- Demo

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