Android: можно ли настроить уведомление на уведомление по желанию?и даже если проект не запущен? - PullRequest
0 голосов
/ 23 декабря 2011

В Моем приложении я собираюсь использовать этот код, чтобы использовать Уведомление:

 private void addDefaultNotification(){
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

    int icon = R.drawable.icon;
    CharSequence text = "Notification Text";
    CharSequence contentTitle = "Notification Title";
    CharSequence contentText = "Sample notification text.";
    long when = System.currentTimeMillis();

    Intent intent = new Intent(this, NotificationViewer.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
    Notification notification = new Notification(icon,text,when);

    long[] vibrate = {0,100,200,300};
    notification.vibrate = vibrate;

    notification.ledARGB = Color.RED;
    notification.ledOffMS = 300;
    notification.ledOnMS = 300;

    notification.defaults |= Notification.DEFAULT_LIGHTS;
    //notification.flags |= Notification.FLAG_SHOW_LIGHTS;

    notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);

    notificationManager.notify(com.example.NotifivcationSample.Constants.NOTIFICATION_ID, notification);
}

правильно, я получаю уведомление. Вызывая эту функцию. Но я хочу, чтобы он уведомлял пользователя, даже если приложение не запускается в это время на устройстве, а уведомление должно быть уведомлено в нужное время.

Возможно ли это? Если да, то, пожалуйста, помогите мне за это. Спасибо.

Отредактировано:

    public class AlarmNotificationReceiver extends BroadcastReceiver{
    //private Intent intent;
    private NotificationManager notificationManager;
    private Notification notification;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        long value1 = intent.getLongExtra("param1", 0);     
        String value2 = intent.getStringExtra("param2");

        addTwoMonthNotification();

    }
}

Я сделал так, но не смог создать уведомление в этом классе получателя. Зачем ? и что я должен сделать?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Да, это возможно.

Вам необходимо зарегистрировать свое намерение в AlarmManager и настроить класс получателя уведомлений для ожидания уведомления от AlarmManager, когда пора запускать.

В основном вам потребуется следующее:

  1. Класс Intent Intent (подкласс Intent)

    public class MyNotificationIntent extends Intent {
        // basic implementation ...
    }
    
  2. Класс NotificationReceiver, подкласс BroadcastReceiver. Где вы получаете уведомление от AlarmManger и вам нужно запустить свой код, чтобы показать уведомление (у вас уже есть этот материал)

    public class AlarmNotificationReceiver extends BroadcastReceiver{
    
        @Override
        public void onReceive(Context context, Intent intent){
    
            long value1 = intent.getLongExtra("param1", 0);
            String value2 = intent.getStringExtra("param2");
    
            // code to show the notification  
            ... 
            notificationManager.notify(...);
       }
    }
    
  3. Утилита для регистрации вашего уведомления в AlarmManager

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new MyNotificationIntent("com.alex.intent.action.ALARM_NOTIFICATION",
        Uri.parse("notification_alarm_id"), context, AlarmNotificationReceiver.class);
    intent.putExtra("param1", value1);
    intent.putExtra("param2", value2);
    
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.RTC_WAKEUP, timeToRun, pendingIntent);
    
1 голос
/ 23 декабря 2011

http://android -er.blogspot.com / 2010/10 / простой пример-из-сигнализации-сервис-using.html

Класс AlarmManager обеспечивает доступ к системным службам сигнализации. Это позволяет запланировать запуск приложения в определенный момент в будущем. Когда срабатывает сигнал тревоги, зарегистрированное для него намерение транслируется системой, автоматически запуская целевое приложение, если оно еще не запущено.

Вы также можете прочитать это: http://android.arnodenhond.com/tutorials/alarm-notification

Вы должны иметь возможность уведомить пользователя в нужное время без проблем

ДОБАВЛЕНО

Или вы можете сделать:

 new Handler().postDelayed(new Runnable() { public void run() {
           //Shoot your notification here
      }
   }, 1000 * 60 * 5 );

** ИЛИ **

http://developer.android.com/resources/articles/timed-ui-updates.html

private Runnable mUpdateTimeTask = new Runnable() {
   public void run() {
       final long start = mStartTime;
       long millis = //something;
       int seconds = //something;
       int minutes = //something;
       seconds     =//something;

       mHandler.postAtTime(this,
               start + (((minutes * 60) + seconds + 1) * 1000));
   }
};
...