簡體   English   中英

在Android中如何在其他活動或片段中使用接收者信息?

[英]How to use a receiver info at other activity or fragment, in Android?

我正在嘗試使接收器能夠通知手機是否以及何時連接到Internet。

現在,問題是我有一個處理兩個片段的主要活動。
在其中一個片段中,我有一種需要使用Internet的搜索方法。
因此,我想做的是:如果沒有Internet,則在按下搜索按鈕后,該用戶將得到祝酒。

為此,我在主要活動中寫了以下課程-

public class ConnectionChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

       Boolean netBol;

    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetInfo = connectivityManager
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    boolean isConnected = activeNetInfo != null
        && activeNetInfo.isConnectedOrConnecting();

    if (isConnected){

         Boolean netBol = true;

    }else{

        netBol = false;
    Toast.makeText(context, R.string.no_internet, Toast.LENGTH_LONG).show();
    }
}

}

如您所見,我正在嘗試使用布爾netBol來確定是否存在連接。

但關鍵是我想將其傳遞給搜索片段,但我不知道該怎么做。

我還在清單中添加了以下行:

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

我還將以下代碼放入主要活動中;

   ConnectionChangeReceiver netReceiver = new ConnectionChangeReceiver();
            IntentFilter filterNet = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");

            registerReceiver(netReceiver, filterNet);

就我的理解而言,這就是說我已經在接收方上聲明了,但是在片段上我需要一個。

所以我要問的是:我應該怎么做才能將信息從接收者傳遞到片段,以便我知道是否有互聯網?

簡單。 使用底部

您可以在此處找到示例應用程序

更改您的代碼,如下所示:

您可以在接收器中執行以下操作:

if (isConnected){

BusProvider.getInstance().post(new InternetAvailable(true));

}else{

BusProvider.getInstance().post(new InternetAvailable(false));
Toast.makeText(context, R.string.no_internet, Toast.LENGTH_LONG).show();

}

InternetAvailable類可以是這樣的:

public class InternetAvailable {
  private static boolean isInternetAvalable;


  public InternetAvailable(boolean isInternetAvailableParam) {
  isInternetAvailable = isInternetAvailableParam
  }

  @Produce public InternetAvailable isInternetAvailable() {
    return isInternetAvailable;

  }
}

BusProvider類是這樣的:

public final class BusProvider {
  private static final Bus BUS = new Bus();

  public static Bus getInstance() {
    return BUS;
  }

  private BusProvider() {
    // No instances.
  }
}

像這樣修改您的SearchFragment

@Override public void onResume() {
  super.onResume();
  BusProvider.getInstance().register(this);
}

@Override public void onPause() {
  super.onPause();
  BusProvider.getInstance().unregister(this);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM