【问题标题】:How to run code only once when internet connection is available again?当互联网连接再次可用时,如何只运行一次代码?
【发布时间】:2018-02-11 16:06:38
【问题描述】:

当用户再次访问互联网时,我只想运行一次代码。

我的第一个想法是在“Android.net.conn.CONNECTIVITY_CHANGE”上使用 BroadcastReceiver,并在代码运行后立即取消注册。但我意识到,当用户停用互联网连接时,这也会运行代码。

有没有更好的方法?或者有没有办法检查当前意图是停用还是激活互联网连接?

这是目前的样子:

final BroadcastReceiver OnConnecion = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    if(isOnline()){
                        vplan1 = new Vplan("vplan1", CheckService.this);
                        vplan2 = new Vplan("vplan2", CheckService.this);
                        Calendar heute = Calendar.getInstance();
                        Calendar date1 = vplan1.getCalendar();
                        Calendar date2 = vplan2.getCalendar();
                        if ((!(vergleiche(heute, date1) < 0)) & (!(vergleiche(heute, date2) < 0))) {
                            getData task = new getData();               
                            task.execute();
                            unregisterReceiver(this);
                        }

                    }
                }
            };
            registerReceiver(OnConnecion, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));

谢谢

【问题讨论】:

  • 你需要检查 NetworkInfo 认为 ConnectivityManager 因为 CONNECTIVITY_CHANGE 只通知某些事情发生了变化。

标签: android android-intent broadcastreceiver


【解决方案1】:

如果您熟悉 SharedPreferences,答案很简单。

首先。将这些权限放在您的清单中:

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

然后,请创建一个如下所示的结构,您应该可以开始了:

public class activity extends AppCompatActivity {

  Context mContext;
  private boolean OnlyOneTime;


  @Override
  protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this = mContext;



    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mContext);
    SharedPreferences.Editor prefEdit = pref.edit();

    OnlyOneTime = pref.getBoolean("One_time", true);

    try {

      if (OnlyOneTime) {


        // Put Your Code that Uses Internet Connection And Must Only happen One Time 
      }

    } catch (Exception e) {
      prefEdit.putBoolean("One_time", false);
      prefEdit.apply();

      e.printStackTrace();
    }

  }
}

这有一个例外。您根本不需要任何网络类。

如果下载失败,会抛出异常。

现在,如果您希望重复此内容。只需添加:

prefEdit.putBoolean("One_time", true);
prefEdit.apply();

您想要的任何地方。并重复该过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多