仅限片段广播接收器

时间:2018-01-03 12:26:10

标签: android broadcastreceiver fragment android-broadcastreceiver

我创建了一个BroadCast接收器来通知GPS状态如下:

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();
    }
}

Manifest中的接收者如下:

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

现在,问题是,如果我只想在单个片段中检查gps状态怎么办?现在它正在播放整个应用程序。

感谢。

2 个答案:

答案 0 :(得分:0)

<强> ReceiverActivity.java

监视名为&#34; custom-event-name&#34;

的事件的通知的活动
@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);

答案 1 :(得分:-1)

在片段的OnResume()中写

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

片段写入的onPause()

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

在片段底部写

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