需要调度程序到
-
Run task immediately after net is available
-
Reschedule task if it fails because of some problems.
-
should handle cases of broadcast receiver to know if connection available
-
No delay in execution if the internet is already available not like GCMNetworkManager's OneOfTask which take at least 30 seconds to execute the scheduled task
我尝试了GCM Network Manager的OneOftask处理,但即使有Internet可用,也至少需要30秒才能执行。
是否还有其他调度程序将全部以上任务。
使用广播接收器,该广播接收器可以收听网络连接性更改。并检查天气该设备连接到Internet或不使用ConnectivitionManager。如果您的设备连接到Internet,请安排您的任务。
使用广播接收器。添加以下几行以表现出来。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name="yourpackage.ConnectivityReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
听众类:
package yourpackage;
public class ConnectivityReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
switch (action) {
case ConnectivityManager.CONNECTIVITY_ACTION:
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
//start schedule
}else{
//stop schedule
}
break;
}
}}
为此,您需要设置一个"广播",一旦设备启动Internet或在接收器上启用,接收器将向您发送回调,然后您可以安排在此处。
您可以使用broadcastreceiver来收听网络状态,如果可以使用网络,请启动调度程序。对于调度程序,您可以用户计划ExecutorService。例如..
opecutors.newsinglethreadscheduledexecutor()。 @Override public void run(){ //在这里致电tast } },0,10,间隔时间);
- 无需使用服务
- 通过使用广播也可以做到。
- 当广播获得互联网状态时,您可以检查状态并进一步执行您的状态。
- 希望对您有所帮助,如果没有,请让我知道我会提供代码。用适当的解释。
请单击此处检查此链接