广播接收器的建议

时间:2017-06-06 08:48:38

标签: java android broadcastreceiver

我的当前项目方法仅适用于在启用移动数据时将同步与远程数据库连接。这次如何使用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数据库。

1 个答案:

答案 0 :(得分:0)

无论移动数据还是wifi,ConnectivityManager基本上都会提供网络连接状态。因此,您的代码应该适用于这两种情况。