0

Ich möchte eine Push-Benachrichtigung in Android-App ohne gcm wie dinge.I wollen alle Aktion von meiner Seite (Android) zu behandeln.Einfache Push-Benachrichtigung ohne gcm wie Dinge

Bis jetzt habe ich ein json response.Which i in Push-to verwenden versuchen notification.and meine Push-Benachrichtigung funktioniert auf Klick event.But Ich habe keine Ahnung, wie es überprüfen oder json Antwort automatisch (periodisch) excute. Hier ist mein aktueller Code für Json Respone (mit 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); 

    } 
} 

Antwort

1

Diese Lösung wird als kurzfristig, weil sein Lauf auf UI thread bezeichnet. Sie können dasselbe in service für background working tun.

Denn es in servic läuft hier wie 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); 

    } 
} 
+0

Bro, ich weiß nicht, aber es funktioniert nicht, haben Sie ein Problem mit manifest.internet und Netzwerkstatus Zustand Erlaubnis bereits gegeben – Adi

+0

seine Fehler zeigt, ? –

+0

kein Fehler außer diesem Problem beim Lesen der Netzwerkstatistik java.lang.IllegalStateException: Problem beim Analysieren der Zeile: null – Adi