Android:等待网络连接进行API调用

时间:2018-02-15 19:14:02

标签: android

在我的项目中,要求是通过进行API调用单击按钮将一些图像上传到服务器。然而,棘手的部分是我们假设用户可能在网络不可用的地方。所以应该有一种始终检查网络连接的方法。仅当网络可用时才执行上载图像意向服务。

你能告诉我应该用什么吗? RxJava? BroadcastReceiver还是其他什么?处理此问题的最佳做法是什么?

非常感谢!!!

2 个答案:

答案 0 :(得分:2)

处理此问题的最佳做法之一是使用Android的JobScheduler API调度图片上传作业。 JobScheduler允许您在分派作业之前设置作业必须满足的条件,其中一个条件是网络连接条件。

此外,如果您的目标是较低的API级别且JobScheduler不可用,GCMNetworkManager也是一种选择。

答案 1 :(得分:0)

您可以使用 ConnectivityManager 类,使用简单的提醒对话框,以确保用户具有互联网连接,例如:

private NetworkState mNetworkState;
        mNetworkState = new NetworkState(mContext);
            if (!mNetworkState.isConnected()) {
            /**
             If application is not connected to the internet , then
             display dialog message and finish.
             */
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            mContext);
            // set dialog message
            alertDialogBuilder
            .setMessage("This application needs internet connection.")
            .setCancelable(false).setPositiveButton("Got it!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
/**
  In my case i close the current activity , by calling finish() 
 */
MainActivity.this.finish();
    }
    });
    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();
    // show it
    alertDialog.show();
    } else {
    /**
     YOUR CODE GOES HERE :
     */
    }

网络状态类将是:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
// This class for accessing network state for our application
public class NetworkState {

private final ConnectivityManager mConnectivityManager;


public NetworkState(Context context) {
    mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
}

public boolean isConnected() {
    NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
    return networkInfo != null && networkInfo.isConnectedOrConnecting();
} }