androidpush-notificationandroid-volleyandroid-jsonserver-response

Simple push notification without gcm like things


I want to implement a push notification in android app without gcm like things.I want to handle all action from my side(android) .

Till now I have a json response.Which i am trying to use in push notification.and my push notification works on click event.But i have no idea how it check or excute json response automatically(periodically). Here is my current code for json respone (using volley lib.).

public class MainActivity extends AppCompatActivity {
    // Log tag

    int total_time = 1000 * 60 * 60 * 24; // total one day you can change
    int peroid_time = 5000; // one hour time is assumed to make request

    private static final String TAG = MainActivity.class.getSimpleName();

    private static String url = "http://my_url/Service.asmx/GetNotifications";



    private ProgressDialog pDialog;
    private List<Notifications> noteList = new ArrayList<Notifications>();
    private ListView listView;
    private Custom_Adapter_N adapter;
    EditText ed1,ed2,ed3;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.list_note);
        adapter = new Custom_Adapter_N(this, noteList);
        listView.setAdapter(adapter);


        new CountDownTimer(peroid_time, total_time) {

            public void onTick(long millisUntilFinished) {
                // make request to web and get reponse and show notification.
                MakingWebRequest();

                Toast.makeText(MainActivity.this, " Tesitng the data", Toast.LENGTH_LONG).show();
            }

            public void onFinish() {
                //
            }
        }.start();


//        pDialog = new ProgressDialog(this);
//        // Showing progress dialog before making http request
//        pDialog.setMessage("Loading...");
//        pDialog.show();


        ed1=(EditText)findViewById(R.id.editText);
        ed2=(EditText)findViewById(R.id.editText2);
        ed3=(EditText)findViewById(R.id.editText3);
        Button b1=(Button)findViewById(R.id.button);


    }

//    //on create
//    @Override
//    public void onDestroy() {
//        super.onDestroy();
//        hidePDialog();
//    }

    private void hidePDialog() {
        if (pDialog != null) {
            pDialog.dismiss();
            pDialog = null;
        }
    }

   public  void MakingWebRequest() {
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {

                    @Override
                    public void onResponse(String response) {
                        Log.d(TAG, response.toString());
                        hidePDialog();


                        try {
                            JSONArray jsonarray = new JSONArray(response);
                            for (int i = 0; i < jsonarray.length(); i++) {
                                JSONObject obj = jsonarray.getJSONObject(i);
//                                Notifications note = new Notifications();
//                                note.setNotificationId(obj.getString("NotificationId"));
//                                note.setNotification(obj.getString("Notification"));
                                String excep = obj.getString("NotificationId");
                                String message1 = obj.getString("Notification");


                                NotificationManager notif=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                                NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this);
                                Notification notify=new Notification(R.drawable.push,message1,System.currentTimeMillis());
                                PendingIntent pending= PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0);

                                notify = builder.setContentIntent(pending)
                                        .setStyle(new NotificationCompat.BigTextStyle().bigText(message1))
                                        .setSmallIcon(R.drawable.push).setTicker(excep).setWhen(System.currentTimeMillis())
                                        .setAutoCancel(true).setContentTitle(message1)
                                        .setContentText(message1).build();
//                notif.notify(NOTIFICATION, notify);
                                notif.notify(0, notify);

//                                String id = obj.getString("Exception");
//                                String message1 = obj.getString("Message");
//                                Toast.makeText(Notification1.this, id.toString(), Toast.LENGTH_LONG).show();
//                                Toast.makeText(Notification1.this, message1.toString(), Toast.LENGTH_LONG).show();


                                // adding movie to movies array
//                                noteList.add(note);

                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        // notifying list adapter about data changes
                        // so that it renders the list view with updated data
                        adapter.notifyDataSetChanged();
                    }


                    //....  you rest code
                    //       add your notification here

                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                hidePDialog();
            }
        }



        )
        {

            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();

                return params;
            }
        };

        RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
        requestQueue.add(stringRequest);

    }
}

Solution

  • This solution is referred as short term because its running on UI thread. You can do the same in service for background working.

    For running it in servic look here how service start and works.

       public class MainActivity extends Activity {
    
        int total_time = 1000 * 60 * 60 * 24; // total one day you can change
        int peroid_time = 1000 * 60 * 60; // one hour time is assumed to make request
    
        // reduced the time while testing
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            new CountDownTimer(peroid_time, total_time) {
    
                public void onTick(long millisUntilFinished) {
                    // make request to web and get reponse and show notification.
                    MakingWebRequest();
                }
    
                public void onFinish() {
                    //
                }
            }.start();
    
        }
    
        void MakingWebRequest() {
            StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                    new Response.Listener<String>() {
    
    
                        //....  you rest code
                        //       add your notification here
    
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hidePDialog();
                }
            });
    
            RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
            requestQueue.add(stringRequest);
    
        }
    }