0

我想實現一個推送通知在Android應用程序沒有gcm喜歡的東西。我想處理從我身邊(android)的所有行動。簡單的推送通知沒有gcm喜歡的東西

直到現在我response.Which我試圖在推動使用JSON notification.and我的推送通知適用於點擊event.But我不知道如何檢查或EXCUTE JSON響應自動(定期)。這是我當前的代碼爲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

該溶液被稱爲短期由於其對UI thread運行。您可以在service中爲background working做同樣的事情。

對於SERVIC運行它看這裏如何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

兄弟,我不知道,但它不工作,有任何問題與manifest.internet和網絡狀態狀態權限已經給 – Adi

+0

其顯示任何錯誤? –

+0

沒有錯誤,除了這個問題閱讀網絡統計 java.lang.IllegalStateException:問題解析行:null – Adi