How to use LocalBroadcastManager?

后端 未结 13 3194
天命终不由人
天命终不由人 2020-11-21 04:15

How to use/locate LocalBroadcastManager as described in google docs and Service broadcast doc?

I tried to google it, but there is no code available to s

相关标签:
13条回答
  • 2020-11-21 05:01

    Kotlin version of using LocalBroadcastManager:

    Please check the below code for registering, sending and receiving the broadcast message.

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // register broadcast manager
            val localBroadcastManager = LocalBroadcastManager.getInstance(this)
            localBroadcastManager.registerReceiver(receiver, IntentFilter("your_action"))
        }
    
        // broadcast receiver
        var receiver: BroadcastReceiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context?, intent: Intent?) {
                if (intent != null) {
                    val str = intent.getStringExtra("key")
                    
                }
            }
        }
    
        /**
         * Send broadcast method
         */
        fun sendBroadcast() {
            val intent = Intent("your_action")
            intent.putExtra("key", "Your data")
            LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
        }
    
        override fun onDestroy() {
            // Unregister broadcast
            LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
            super.onDestroy()
        }
    
    }
    
    0 讨论(0)
  • 2020-11-21 05:02

    An example of an Activity and a Service implementing a LocalBroadcastManager can be found in the developer docs. I personally found it very useful.

    EDIT: The link has since then been removed from the site, but the data is the following: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/example/android/supportv4/content/LocalServiceBroadcaster.java

    0 讨论(0)
  • 2020-11-21 05:08

    I'd rather like to answer comprehensively.

    1. LocalbroadcastManager included in android 3.0 and above so you have to use support library v4 for early releases. see instructions here

    2. Create a broadcast receiver:

      private BroadcastReceiver onNotice= new BroadcastReceiver() {
      
          @Override
          public void onReceive(Context context, Intent intent) {
              // intent can contain anydata
              Log.d("sohail","onReceive called");
              tv.setText("Broadcast received !");
      
          }
      };
      
    3. Register your receiver in onResume of activity like:

      protected void onResume() {
              super.onResume();
      
              IntentFilter iff= new IntentFilter(MyIntentService.ACTION);
              LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, iff);
          }
      
      //MyIntentService.ACTION is just a public static string defined in MyIntentService.
      
    4. unRegister receiver in onPause:

      protected void onPause() {
        super.onPause();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice);
      }
      
    5. Now whenever a localbroadcast is sent from applications' activity or service, onReceive of onNotice will be called :).

    Edit: You can read complete tutorial here LocalBroadcastManager: Intra application message passing

    0 讨论(0)
  • 2020-11-21 05:13
    enter code here if (createSuccses){
                            val userDataChange=Intent(BRODCAST_USER_DATA_CHANGE)
                            LocalBroadcastManager.getInstance(this).sendBroadcast(
                                userDataChange
                            )
                            enableSpinner(false)
                            finish()
    
    0 讨论(0)
  • 2020-11-21 05:14

    By declaring one in your AndroidManifest.xml file with the tag (also called static)

    <receiver android:name=".YourBrodcastReceiverClass"  android:exported="true">
    <intent-filter>
        <!-- The actions you wish to listen to, below is an example -->
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
    

    You will notice that the broadcast receiver declared above has a property of exported=”true”. This attribute tells the receiver that it can receive broadcasts from outside the scope of the application.
    2. Or dynamically by registering an instance with registerReceiver (what is known as context registered)

    public abstract Intent registerReceiver (BroadcastReceiver receiver, 
                IntentFilter filter);
    
    public void onReceive(Context context, Intent intent) {
    //Implement your logic here
    }
    

    There are three ways to send broadcasts:
    The sendOrderedBroadcast method, makes sure to send broadcasts to only one receiver at a time. Each broadcast can in turn, pass along data to the one following it, or to stop the propagation of the broadcast to the receivers that follow.
    The sendBroadcast is similar to the method mentioned above, with one difference. All broadcast receivers receive the message and do not depend on one another.
    The LocalBroadcastManager.sendBroadcast method only sends broadcasts to receivers defined inside your application and does not exceed the scope of your application.

    0 讨论(0)
  • 2020-11-21 05:19

    In Eclipse, eventually I had to add Compatibility/Support Library by right-clicking on my project and selecting:

    Android Tools -> Add Support Library

    Once it was added, then I was able to use LocalBroadcastManager class in my code.


    Android Compatibility Library

    0 讨论(0)
提交回复
热议问题