在我的项目中,要求是通过进行API调用单击按钮将一些图像上传到服务器。然而,棘手的部分是我们假设用户可能在网络不可用的地方。所以应该有一种始终检查网络连接的方法。仅当网络可用时才执行上载图像意向服务。
你能告诉我应该用什么吗? RxJava? BroadcastReceiver还是其他什么?处理此问题的最佳做法是什么?
非常感谢!!!
答案 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();
} }