简单的推送通知没有gcm之类的东西

时间:2016-08-04 05:27:08

标签: android push-notification android-volley android-json server-response

我想在Android应用程序中实现推送通知而不需要gcm之类的东西。我想处理来自我身边的所有动作(android)。

直到现在我有一个json响应。我试图在推送通知中使用。我的推送通知适用于点击事件。但我不知道如何自动检查或执行json响应(定期)< / strong>即可。这是我目前的json respone代码(使用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);

    }
}

1 个答案:

答案 0 :(得分:1)

此解决方案被称为短期解决方案,因为它在UI thread上运行。您可以service background working 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); } } 执行相同操作。

要在服务中运行它,请查看service start and works.

SecondViewController