0

I have created a BroadCast Receiver to notify the GPS state as below :

public class GpsLocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {

        Toast.makeText(context, "asdsadasdsaD", Toast.LENGTH_SHORT).show();
    }
}

Receiver in Manifest as below :

 <receiver android:name=".utility.GpsLocationReceiver">
            <intent-filter>
                <action android:name="android.location.PROVIDERS_CHANGED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

Now, the issue is that What if I want to check gps state only in single Fragment ? Right now it broadcasting for overall app.

Thanks.

jaimin
  • 23
  • 1
  • 8
  • try to use LocalBroadcastManager for your problem here is the [DOCUMENTATION](https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html) and [example](https://stackoverflow.com/questions/14496786/android-how-to-use-localbroadcastmanager) – yashkal Jan 03 '18 at 12:36

2 Answers2

0

ReceiverActivity.java

A Activity that watches for notifications for the event named "custom-event-name"

@Override
public void onCreate(Bundle savedInstanceState) {

 ...

// Register to receive messages.
// We are registering an observer (mMessageReceiver) to receive Intents
// with actions named "custom-event-name".
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
  new IntentFilter("custom-event-name"));
}

// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
 @Override
  public void onReceive(Context context, Intent intent) {
    // Get extra data included in the Intent
   String message = intent.getStringExtra("message");
   Log.d("receiver", "Got message: " + message);
 }
};

  @Override
   protected void onDestroy() {
   // Unregister since the activity is about to be closed.
    LocalBroadcastManager.getInstance(this)
   .unregisterReceiver(mMessageReceiver);
   super.onDestroy();
   }

SenderActivity.java

  Intent intent = new Intent("custom-event-name");
  // You can also include some extra data.
  intent.putExtra("message", "This is my message!");
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
Parveen Sharma
  • 103
  • 1
  • 10
-1

in OnResume() of your fragment write

LocalBroadcastManager.getInstance(context).registerReceiver(gpsChangeReceiver , new IntentFilter("android.location.PROVIDERS_CHANGED"));

An in onPause() of your fragment write

LocalBroadcastManager.getInstance(context).unregisterReceiver(gpsChangeReceiver );

At bottom of your fragment write

private BroadcastReceiver gpsChangeReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
         Toast.makeText(context, "asdsadasdsaD", Toast.LENGTH_SHORT).show();
    }
};