簡體   English   中英

消息:如果沒有連接,請在恢復時發送消息

[英]Messaging: If there is not connection, send message when recover it

我已經為Android創建了一個即時消息應用程序。 但是現在我想添加一些功能:

如果用戶在嘗試發送消息時沒有互聯網連接,則必須在用戶恢復連接時發送該消息。

我想最好的方法是使用廣播接收器。 但我不確定。

編輯:一旦連接失敗,您可以跟蹤所有失敗請求,並設置一個在后台運行的線程,該線程嘗試發送失敗的消息。 假設每10-20秒或更長時間。 如果失敗,線程將進入睡眠狀態。 發送完所有消息后,您關閉線程,只有消息失敗時才啟動新線程。 如果另一條消息失敗,則檢查in Queue。 您還可以使用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM