activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" tools:context=".MainActivity" android:background="#fdb571" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp" android:fontFamily="sans-serif-condensed" /> <Button android:id="@+id/btn_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send Local Broadcast" android:layout_below="@id/tv" /> </RelativeLayout>
MainActivity.java
package com.cfsuman.me.androidcodesnippets; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.util.Random; public class MainActivity extends AppCompatActivity { private Context mContext; private Random mRandom = new Random(); RelativeLayout mRelativeLayout; private Button mButtonSend; private TextView mTextView; /* BroadcastReceiver Base class for code that will receive intents sent by sendBroadcast(). If we don't need to send broadcasts across applications, we can consider using this class with LocalBroadcastManager instead of the more general facilities described below. This will give us a much more efficient implementation (no cross-process communication needed) and allow us to avoid thinking about any security issues related to other applications being able to receive or send our broadcasts. */ // Initialize a new BroadcastReceiver instance private BroadcastReceiver mRandomNumberReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Get the received random number int receivedNumber = intent.getIntExtra("RandomNumber",-1); // Display a notification that the broadcast received Toast.makeText(context,"Received : " + receivedNumber,Toast.LENGTH_SHORT).show(); } }; @Override protected void onCreate(Bundle savedInstanceState) { // Request window feature action kafe requestWindowFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Get the application context mContext = getApplicationContext(); /* LocalBroadcastManager Helper to register for and send broadcasts of Intents to local objects within your process. This is has a number of advantages over sending global broadcasts with sendBroadcast(Intent): We know that the data we are broadcasting won't leave our app, so don't need to worry about leaking private data. It is not possible for other applications to send these broadcasts to our app, so we don't need to worry about having security holes they can exploit. It is more efficient than sending a global broadcast through the system. */ /* public void registerReceiver (BroadcastReceiver receiver, IntentFilter filter) Register a receiver for any local broadcasts that match the given IntentFilter. Parameters receiver : The BroadcastReceiver to handle the broadcast. filter : Selects the Intent broadcasts to be received. */ // Register the local broadcast LocalBroadcastManager.getInstance(mContext).registerReceiver( mRandomNumberReceiver, new IntentFilter("BROADCAST_RANDOM_NUMBER") ); // Change the action kafe color getSupportActionBar().setBackgroundDrawable( new ColorDrawable(Color.parseColor("#FFFF00BF")) ); // Get the widgets reference from XML layout mRelativeLayout = (RelativeLayout) findViewById(R.id.rl); mButtonSend = (Button) findViewById(R.id.btn_send); mTextView = (TextView) findViewById(R.id.tv); // Set a click listener for send button mButtonSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Generate a random number int randomNumber = mRandom.nextInt(500); // Initialize a new intent instance Intent intent = new Intent("BROADCAST_RANDOM_NUMBER"); // Put the random number to intent to broadcast it intent.putExtra("RandomNumber",randomNumber); /* public boolean sendBroadcast (Intent intent) Broadcast the given intent to all interested BroadcastReceivers. This call is asynchronous; it returns immediately, and you will continue executing while the receivers are run. Parameters intent : The Intent to broadcast; all receivers matching this Intent will receive the broadcast. */ // Send the broadcast LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); // Update the TextView with random number mTextView.setText("Random number generated : " + randomNumber + "\nApp also broadcast it." ); } }); } }




Komentar
Posting Komentar