我想在用户再次访问互联网时只运行一次代码。
我的第一个想法是在" 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"));
由于
答案 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();
您想要的任何地方。并重复这个过程。