質問: アプリ作成の練習として目覚ましアプリを作成しています 複数の時間を設定し、指定された時間にアラームを鳴らすところまでは出来ました ですがそのアラームがどのアラームなのか判別できません 具体的に言うと、pendingIntentにのっけたrequestCodeをレシーバーで取得したいといった感じです 答えそのものでなくても良いのでアドバイスいただけないでしょうか? よろしくお願いします
回答: `requestCode` は残念ながらレシーバー側で取得できませんが、 `Intent` のExtraデータが目的の用途のために使えると思います。`Intent` には、様々な型のデータをキー値形式で保存できるExtraデータ領域が備わっています。 アラーム種類のやりとりのためであれば、`int` 型か `String` 型のExtraデータを使えばいいと思います。例えば `int` 型を使う場合、アラームの `PendingIntent` を作成する際に ``` intent.putExtra("alarm_type", 3); ``` というようにアラーム種類を `Intent` に格納しておけます。ここで、`"alarm_type"` はExtraデータの識別子で、`3` が格納する値です。また、データの取り出しですが、`Intent` を受信した側で ``` int alarmType = intent.getIntExtra("alarm_type", 0) // 3が取得される ``` というように`Intent` からデータが取得できます。第一引数には、格納時と同じExtraデータの識別子を指定してください。第二引数の `0` は、もし `intent` に `"alarm_type"` という識別子のExtraデータが存在しなかった場合に使われるデフォルト値です。 なお、上記の方法でアラーム種類のやりとりができるとしても、アラーム種類ごとに `requestCode` は変えておくことをおすすめします。というのも、`PendingIntent` は `PendingIntent.getBroadcast()` などを呼び出したときに必ず新しいものが作成されるわけではなく、似ている `intent` の場合は全て一緒に管理されてしまう (過去の内容を上書きしてしまう) からです。`requestCode` が異なる `PendingIntent` は必ず区別して管理される (上書きされない) ので、上記の方法でアラーム種別をやりとりするような場合は、アラーム種別を `requestCode` にも設定しておくのがいいと思います。