0

アラームプログラムを作ろうとしています。これまで、ユーザーがアラームを鳴らしたい時間を選択できるアクティビティを作成しました。これは正常に機能しています。次に、アラームマネージャーを使用して、将来の特定の時点でコードの一部を呼び出すようにOSに指示する必要があります。これを大雑把にテストするために、メインアクティビティでテストボタンを押すと実行される次のコードを追加しました。

Intent intent = new Intent(getApplicationContext(), to_call_when_alarm_goes_off.class);
PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(),0, intent, 0);
AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarms.cancel(pIntent);

alarms.setRepeating(
        AlarmManager.RTC_WAKEUP,
        System.currentTimeMillis()+1000, 
        AlarmManager.INTERVAL_DAY, 
        pIntent);

これは、ボタンを押してから1秒後にto_call_when_alarm_goes_offというコードが実行されることを意味するはずです。これで少し混乱します。「to_call_when_alarm_goes_off」を設定する方法と場所がよくわかりません。私がしたことは、次のようにプロジェクトに新しいクラスを追加することでした。

package com.mycompany.alarmprogram;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class to_call_when_alarm_goes_off extends BroadcastReceiver
{

    @Override
    public void onReceive(Context arg0, Intent arg1) 
    {
        // TODO Auto-generated method stub
        Log.i("ALARM","TIME TO WAKE UP!!!");

    }

}

すべてのコードがコンパイルされ、ボタンを押すと、最初のコードスニペットのすべてのコードがクラッシュせずに実行されますが、1秒後にブロードキャストレシーバーコードは実行されません。明らかに私は何かを誤解しています。

4

2 に答える 2

2

適切なアクション文字列を使用して、受信者をマニフェスト ファイルに登録していないと思います。以下に示すように。

         <receiver android:name=".to_call_when_alarm_goes_off" > 
               <intent-filter>
                  <action android:name="com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE" />
                </intent-filter>// can change name/action string as par ur requirement.
        </receiver>

インテントに同じアクション文字列を設定する必要があります。アクション文字列はマニフェストとここintent.setAction("com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE");ではJavaでも同じでなければならないことを覚えておいてください。それだけがレシーバーをトリガーします。

コードは以下のように変更できます。

Intent intent = new Intent(getApplicationContext(), to_call_when_alarm_goes_off.class);
intent.setAction("com.android.whatever.WHAT_EVER_NAM_YOU_WANNA_GIVE");// added line

PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(),0, intent, 0);

AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

alarms.cancel(pIntent);


alarms.setRepeating(
        AlarmManager.RTC_WAKEUP,
        System.currentTimeMillis()+1000, 
        AlarmManager.INTERVAL_DAY, 
        pIntent);
于 2012-07-06T16:53:04.443 に答える
0

to_call_when_alarm_goes_offクラスAndroidManifest.xmlをレシーバーとして登録する必要があります。

<receiver android:name=".to_call_when_alarm_goes_off"></receiver>

詳細については、APIドキュメントをご覧ください。

于 2012-07-06T16:51:24.883 に答える