当互联网连接再次可用时,如何只运行一次代码?

时间:2018-02-11 16:06:39

标签: android android-intent broadcastreceiver

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

我的第一个想法是在" 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"));

由于

1 个答案:

答案 0 :(得分:0)

如果您熟悉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();

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