2

特定の日時にアラームまたは通知を受信しようとしています。配列内の特定の日付に対して複数のアラームを設定できるようにしたい。ボタンを機能させるためにどこを続行すればよいかわかりません。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Button button = (Button)findViewById(R.id.button1);
   // button.setOnClickListener(this);
    final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
    final Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v) {

             if (checkBox.isChecked()) {



             }

        }

よろしくお願いします。

4

3 に答える 3

3

アラームマネージャーを使用します

このチュートリアルは、その使用方法の非常に簡単な例です。

それをの基本的なステップに分解するの簡単な例

  1. イベントの作成
  2. イベントを処理するためのBroadcastReceiverの作成

編集
通知を行うには、アラームイベントが受信されたときに通知を作成するようにブロードキャストレシーバーを変更します。

Androidステータス通知ドキュメントには、通知を作成するための基本的な手順がよく示されています。

  1. NotificationManagerへの参照を取得します
  2. 通知インスタンスを作成します。次に、画像、テキスト、時刻を定義できます。これは、アラームイベントがいつ鳴るかがすでに定義されているため、現在の時刻になります。
  3. メッセージやcliked時に起動する意図などの通知コンテンツを定義します
  4. 通知を呼び出す

文字列ns=Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager =(NotificationManager)receiverContext.getSystemService(ns);

Notification notification = new Notification(R.drawable.notification_icon, "Hello", System.currentTimeMillis());

CharSequence contentTitle = "My notification";  
CharSequence contentText = "Hello World!";  
Intent notificationIntent = new Intent(receiverContext, TargetActivity.class);  
PendingIntent contentIntent = PendingIntent.getActivity(receiverContext, 0, notificationIntent, 0);  

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

private static final int notificationID = 1;

mNotificationManager.notify(notificationID, notification);

編集2
アラームマネージャーを使用して指定された時間に通知を作成する

于 2012-08-10T16:32:24.647 に答える
1

あなたはこのように試すことができます:

ArrayList<Calendar> alarmTimes = getAlarmTimes(); //Make your own function which returns alarm times as an array of Calendar type

for(int i=0; i<alarmTimes.size(); i++)
{
    Intent intent = new Intent(this, YourClass.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTimes[i].getTimeInMillis(), pendingIntent);
}

各アラームを個別に処理する場合は、アラームごとに異なるrequestCodeを使用します。また、 alarmManager.set()関数で使用されているさまざまなフラグを確認することもできます。アプリケーションのニーズに応じてそれらを変更します。

http://developer.android.com/reference/android/app/PendingIntent.html

アラームが鳴ったときにやりたいことをすべて処理するAlarmReceiverクラスを作成する必要があります(AndroidManifestにこのクラスをレシーバーとして追加してください)。アラームと一緒に追加情報を送信する場合は、次のようなインテントエクストラを使用します。

intent.putExtra("info1", value1);
intent.putExtra("info2", value2);

ここで、info1は追加データの名前であり、value1は送信する値です。

お役に立てれば!

編集:

ArrayList<Calendar> alarmTimes = new ArrayList<Calendar>();

Calendar calendar = Calendar.getInstance();
calendar.set(CALENDAR.MONTH, 7);
calendar.set(CALENDAR.DAY_OF_MONTH, 17);
calendar.set(CALENDAR.HOUR_OF_DAY, 13);
calendar.set(CALENDAR.MINUTE, 0);

alarmTimes.add(calendar);

//Repeat the above code for all alarm times and then return array object
return alarmTimes;
于 2012-08-10T17:30:17.757 に答える
1
   Calendar cal = Calendar.getInstance(); //retrieves a calendar object w/ current time
        cal.add(cal.MINUTE, 1); //adds 1 minute to current time

    Intent alarmIntent = new Intent(this, CustomAlarmReceiver.class); 

    /* creates a new PendingIntent using the static variable eventID. 
     *  using eventID allows you to create multiple events with the same code
     *  without a unique id the intent would just be updated with new extras each time its created
     */
    PendingIntent pendingAlarm = PendingIntent.getBroadcast(this, eventID, alarmIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT);
    eventID+=1; 

    /* get the Alarm service and set the alarm with the time to go off and what to do when the
     * alarm is received */
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingAlarm);
    Intent intent1=new Intent(getApplicationContext(),ListActivity.class);
    startActivity(intent1);
    intent1.putExtra("date", date);
    intent1.putExtra("task", message);
              }
于 2013-11-19T18:28:13.640 に答える