Android - Как установить уведомление на конкретную дату в будущем?

Изменить: РЕШАЕТ! Вы когда-либо хотели установить уведомление с определенной даты, начиная с определенного момента времени (когда действие запускается или когда нажата кнопка?) Подробнее узнать, как:

 //Set a notification in 7 days
                Calendar sevendayalarm = Calendar.getInstance();

                sevendayalarm.add(Calendar.DATE, 7);

                Intent intent = new Intent(this, Receiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 001, intent, 0);

                AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, sevendayalarm.getTimeInMillis(), pendingIntent);

Здесь код для класса Receiver

public class Receiver extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        Intent intent = new Intent(this, Test.class);
        long[] pattern = {0, 300, 0};
        PendingIntent pi = PendingIntent.getActivity(this, 01234, intent, 0);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.depressiontest)
            .setContentTitle("Take Questionnaire")
            .setContentText("Take questionnaire for Duke Mood Study.")
            .setVibrate(pattern)
            .setAutoCancel(true);

        mBuilder.setContentIntent(pi);
        mBuilder.setDefaults(Notification.DEFAULT_SOUND);
        mBuilder.setAutoCancel(true);
        NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(01234, mBuilder.build());
    }
}

И не забудьте добавить нижеприведенные разрешения в манифест!

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
 <service android:name=".Receiver2" android:enabled="true">
        <intent-filter> <action android:name="NOTIFICATION_SERVICE" /></intent-filter>
    </service>

Ответ 1

Не забудьте указать следующие разрешения манифеста

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Ваши регистрационные записи получателя будут такими:

   <receiver android:name=".AlarmReceiver" >
         <intent-filter>
           <action android:name="NOTIFICATION_SERVICE" />
         </intent-filter>
     </receiver>

Ответ 2

Важно отметить: При регистрации вашего широковещательного приемника с помощью Intent-Filter вам необходимо добавить атрибут exported и установить его в значение false. Вот так:

<service

        android:name=".utility.AlarmReceiver" android:exported="false">
        <intent-filter>
            <action android:name="NOTIFICATION_SERVICE" />
        </intent-filter>

    </service>

Другие компоненты других приложений смогут ссылаться или взаимодействовать с вашей службой.

Полное объяснение от Google:

android:exported

   Specifies whether or not components of other applications
   can invoke the service or interact with it —
   "true" if they can, and "false" if not.

When the value is "false", only components of the same application or    
applications with the same user ID can start the service or bind to it.

The default value depends on whether the service contains intent filters.      
The absence of any filters means that it can be invoked only by specifying 
its exact class name. This implies that the service is intended only for 
application-internal use (since others would not know the class name). So 
in this case, the default value is "false". On the other hand, the presence 
of at least one filter implies that the service is intended for external 
use, so the default value is "true".