【发布时间】:2014-06-05 00:20:01
【问题描述】:
我创建了一个适用于 Android 的即时消息应用程序。但现在我想添加一些功能:
如果用户在尝试发送消息时没有互联网连接,则必须在用户恢复连接时发送。
我想最好的方法是使用广播接收器。但我不确定。
【问题讨论】:
标签: android connection broadcastreceiver google-cloud-messaging messaging
我创建了一个适用于 Android 的即时消息应用程序。但现在我想添加一些功能:
如果用户在尝试发送消息时没有互联网连接,则必须在用户恢复连接时发送。
我想最好的方法是使用广播接收器。但我不确定。
【问题讨论】:
标签: android connection broadcastreceiver google-cloud-messaging messaging
编辑:一旦连接失败,您可以跟踪所有失败的请求,并设置一个在后台运行的线程来尝试发送失败的消息。假设每 10-20 秒或更长时间。如果失败,线程将进入睡眠状态。发送完所有消息后,您将关闭线程,并且仅当消息失败时才会启动新线程。如果另一条消息失败,请检查他的队列。您还可以使用 PriorityQueue 以更简单的方式安排消息
你可以像这样获取网络状态。
public boolean getInternetState() {
ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
return true;
} else {
DialogFragment noInternet = new NoInternetDialog();
noInternet.show(getFragmentManager(), "noInternet");
return false;
}
}
您可以向用户显示一个 DialogFragment,这会将他带到 wifi 设置或您想要的任何地方。
public class NoInternetDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("No Internet Connection! Please Check your Internet Connection and try Again!")
.setPositiveButton("Open Wi-fi Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
if(getInternetState()) {
// do network request here
}
【讨论】: