Мне нужно, чтобы пользователь предоставил время, и когда в это время придет уведомление, как я могу это сделать? - PullRequest
0 голосов
/ 03 декабря 2011

Мне нужно, чтобы пользователь предоставил время, и когда в это время придет уведомление, сработает. Как мне это сделать?

public void setReminder(Long taskId, Calendar when) {

    Intent i = new Intent(mContext, OnAlarmReceiver.class);
    i.putExtra(RemindersDbAdapter.KEY_ROWID, (long)taskId); 

    PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT); 

    mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
}

Ответы [ 4 ]

1 голос
/ 03 декабря 2011
// Calculating the difference 
                       long currentmillis = System.currentTimeMillis();

                       final Calendar sync= Calendar.getInstance();
                       sync.set(sync.get(Calendar.YEAR), sync.get(Calendar.MONTH), sync.get(Calendar.DAY_OF_MONTH), mHour, mMinute,0);
                       long millissync = sync.getTimeInMillis();                

                       long alertmillis = (millissync - currentmillis);
                       if(alertmillis>=1000)
                         setAlarm(alertmillis);
1 голос
/ 03 декабря 2011
public void setAlarm(long startTime) 
     {
        // We have to register to AlarmManager
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());

        if(startTime>=100000)
        {
         startTime /= 1000;
         int secs = (int)(startTime);
         calendar.add(Calendar.SECOND, secs);
        }
        else
        {
            int secss = (int)startTime;
             calendar.add(Calendar.MILLISECOND, secss);
        }
        // We set a one shot alarm
        long triggerTime = calendar.getTimeInMillis();

        //Intent myIntent = new Intent(SettingScreen.this, blue.com.api.tab.BroadCast.MyAlarmService.class);
     // pendingIntent = PendingIntent.getService(SettingScreen.this, 0, myIntent, 0);

        alarmManager.set(AlarmManager.RTC_WAKEUP,triggerTime, pendingIntent);
     }
1 голос
/ 03 декабря 2011

Шаг 1: Вы должны создать сервис, для которого здесь мой сервис MyAlarmService.class, как показано ниже

    public class MyAlarmService extends Service {

    @Override
    public void onCreate() {
    // Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
    }

    @Override
    public IBinder onBind(Intent intent) {
     //Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
     return null;
    }

    @Override
    public void onDestroy() {
     super.onDestroy();
     //Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
    }



    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        try
        {

            Context context = getApplicationContext();

            // Displaying Notification
              NotificationManager manger = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);
               Notification notification = new Notification(R.drawable.icon, "Notification", System.currentTimeMillis());

    PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, new Intent(getApplicationContext(), Target.class), 0);

                notification.setLatestEventInfo(getApplicationContext(), "Notification", "Notification subject", contentIntent);
                notification.flags = Notification.FLAG_INSISTENT;

            int NOTIFICATION_ID=(int)System.currentTimeMillis();
                manger.notify(NOTIFICATION_ID, notification);



        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        // TODO Auto-generated method stub
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onStart(Intent intent, int startId) 
    {
       super.onStart(intent, startId);
    }

    @Override
    public boolean onUnbind(Intent intent) {
      return super.onUnbind(intent);
    }

    }

Шаг 2: Вы должны создать ожидающее намерение, как показано ниже

    Intent myIntent = new Intent(SynchronizeData.this, MyAlarmService.class);
    PendingIntent pendingIntent = PendingIntent.getService(this.getApplicationContext(), 0, myIntent, 0);


    Step 3 : Create set Alarm 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP,triggerTime, pendingIntent);

    // trigger time is your time interval in milliseconds 

Примечание: Не забыл объявить службу в AndroidManifest.xml

0 голосов
/ 03 декабря 2011

Это не так просто, как кажется:

настроить Alarm с Androids AlarmManager.

получение сигнала тревоги с помощью BroadcastReciever

Запуск внутри вещания NotificationManager

...