2015-12-11 2 views
0

Ive недавно получил мои push-уведомления для приложения im, работающего над работой. Единственное, что уведомление приходит немедленно. Но мне нужно, чтобы это произошло через 10 минут. Ниже приведен код, который у меня есть, как я могу сделать его после определенного времени?уведомления о времени push java

public void onClick(View v) { 
      Intent i = new Intent(new Intent(Settings.this, Start.class)); 
      startActivity(i); 

      Intent intent = new Intent(); 
      PendingIntent pIntent = PendingIntent.getActivity(Settings.this, 0, intent, 0); 
      Notification noti = new Notification.Builder(Settings.this) 
        .setTicker("TickerTitle") 
        .setContentTitle("Price-Tracker") 
        .setContentText("ContentText") 
        .setSmallIcon(R.mipmap.pw) 
        .setContentIntent(pIntent).getNotification(); 
      noti.flags = Notification.FLAG_AUTO_CANCEL; 
      NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
      nm.notify(0, noti); 

Я попытался изменить nm.notify(0, noti); к nm.notify(10, noti);, например, но это не сработало

ответ

0

вы должны создать новый Thread, установите сон в течение 10 минут, а затем нажмите на уведомление

public void onClick(View v) { 
     Intent i = new Intent(Settings.this, Start.class); 
     startActivity(i); 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        // 10 minutes * 60000 milliseconds(1 minute) 
        Thread.sleep(10 * 60000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Intent intent = new Intent(); 
       PendingIntent pIntent = PendingIntent.getActivity(Settings.this, 0, intent, 0); 
       Notification noti = new Notification.Builder(Settings.this) 
         .setTicker("TickerTitle") 
         .setContentTitle("Price-Tracker") 
         .setContentText("ContentText") 
         .setSmallIcon(R.mipmap.pw) 
         .setContentIntent(pIntent).getNotification(); 
       noti.flags = Notification.FLAG_AUTO_CANCEL; 
       NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
       nm.notify(0, noti); 
      } 
     }).start(); 
} 

Также изменение nm.notify(0, noti); на nm.notify(10, noti); ничего не сделало, потому что 0 будет показано, что является первым

+0

Большое спасибо! Работает отлично. Хотя 10000 в Thread.sleep - 10 sencond. Но плохой он оттуда. Очень ценю помощь – IonaMc

+0

Я отредактировал свой ответ с помощью правильных миллисекунд :) –

+0

Еще одна вещь: если бы я хотел сделать if, если бы кто-то другой, так что, если был выбран определенный переключатель, он вернет определенное время, что бы я изменил? например, если выбрана радиокнопка 1, это будет 1 минута, если была выбрана радиокнопка 2, это будет 10 минут и т. д. – IonaMc

0

Вы можете использовать android.os.Handler для выполнения задания с задержкой.

long DELAY = 10 * 60 * 1000; // 10 minutes 
new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //the job you want to be executed after DELAY milliseconds 
     } 
    }, DELAY); 

Если этот ответ был полезен, установите флажок под кнопкой, чтобы указать это.

0

Добавить следующие

 new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 

        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          nm.notify(0, noti); 
         } 
        }); 

       } 
     },600000); 

10 мин = 600000 миллисекунды

Использование runOnUiThread для обновления пользовательского интерфейса от другого или рабочего потока

    runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          nm.notify(0, noti); 
         } 
        }); 
+0

thread.sleep, похоже, работает нормально, и я могу все еще используйте приложение во время ожидания. Единственное, что мне трудно найти, - это выражение if else, чтобы изменить время, основанное на том, какая радиокнопка выбрана. – IonaMc

+0

вы можете использовать if (radioButton1.isChecked()) { DELAY = 10 * 60 * 1000; } else if (radioButton2.isChecked()) { DELAY = 1 * 60 * 1000; } –

+0

не использовать нить для обновления пользовательского интерфейса, это небезопасно, больше шансов свернуть приложение http://developer.android.com/guide/components/processes-and-threads.html –

1

делать не использовать Thread.sleep, это ужасное решение. Сон использует блокировку вашей нити, пока вы можете продолжить другую работу во время ожидания ... Лучше использовать обработчик с задержкой отправки или AlarmManager для обработки вашего времени ожидания.

Смежные вопросы