如何在android中安排一个任务,它将在互联网可用后立即运行,如果失败则重新安排它?

Gop*_*ote 5 java android gcm-network-manager

需要调度程序

  • 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网络管理器的OneOfTask处理它,但即使互联网可用,也需要至少30秒才能执行.

是否有任何其他调度程序将所有上述任务合二为一.

Sur*_*h A 1

使用可以侦听网络连接变化的广播接收器。并使用 ConnectivityManager 检查设备是否已连接到互联网。如果您的设备已连接到互联网,则安排您的任务。

使用广播接收器。将以下行添加到清单中。

<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>
Run Code Online (Sandbox Code Playgroud)

监听类:

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;
    }
}}
Run Code Online (Sandbox Code Playgroud)