web-dev-qa-db-ja.com

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>
11
eddielement

以下のマニフェスト権限を付与することを忘れないでください

<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>
9
King of Masses

注意すべき重要な点の1つ:ブロードキャストレシーバーを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".