簡體   English   中英

廣播接收器建議

[英]Broadcast Receiver suggestion

我當前的項目方法僅在打開移動數據時才能與我的遠程數據庫連接同步。 這次如何使用wifi來實現相同的功能? 我將添加什么代碼以使其適用於Wifi和移動數據。

這是我的廣播接收器。

public class NetworkMonitor extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, Intent intent) {
        if (checkNetworkConnection(context))
        {
            final DbHelper dbHelper = new DbHelper(context);
            final SQLiteDatabase database = dbHelper.getWritableDatabase();

           Cursor cursor = dbHelper.readFromLocalDatabase(database);

            while (cursor.moveToNext())
            {
                int sync_status = cursor.getInt(cursor.getColumnIndex(DBContract.SYNC_STATUS));
                if (sync_status == DBContract.SYNC_STATUS_FAILED)
                {
                    final String Name = cursor.getString(cursor.getColumnIndex(DBContract.NAME));
                    StringRequest stringRequest = new StringRequest(Request.Method.POST, DBContract.SERVER_URL,
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {
                                    try {
                                        JSONObject jsonObject = new JSONObject(response);
                                        String Response = jsonObject.getString("response");
                                        if (Response.equals("OK"))
                                        {
                                            dbHelper.updateLocalDatabase(Name,DBContract.SYNC_STATUS_OK,database);
                                            context.sendBroadcast(new Intent(DBContract.UI_UPDATE_BROADCAST));
                                        }

                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {

                        }
                    })
                    {
                        @Override
                        protected Map<String, String> getParams() throws AuthFailureError {
                            Map<String, String> params = new HashMap<>();
                            params.put("name",Name);
                            return params;
                        }
                    }
                            ;
                    MySingleton.getInstance(context).addToRequestQue(stringRequest);

                }
            }

        }
    }
`

    public boolean checkNetworkConnection(Context context)
    {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        return (networkInfo!= null && networkInfo.isConnected());
    }

我想做的是關閉移動數據並插入記錄后,將其保存到本地sqlite。 當我打開移動數據時,它會自動將該記錄上傳到遠程mysql數據庫。 但是當我在WiFi上做同樣的事情時。 當我關閉並打開它時,它不會自動將記錄發送到遠程mysql數據庫。

無論移動數據還是無線網絡,ConnectivityManager都將基本給出網絡連接狀態,因此您的代碼應在兩種情況下均能正常工作。

暫無
暫無

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

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