1

私はAndroidが初めてで、これについて何か助けていただければ幸いです。

ウィジェットによって設定されBroadcastReceiverた将来の特定の時間にクラスを呼び出すように、Alarm Manager を使用しようとしています。DatePickerTimePicker

ただし、ブロードキャストレシーバークラスにその機能を実行させることはできません。

以下は、ブロードキャストレシーバークラスが OS からブロードキャストメッセージを受信するためのマニフェストファイルに挿入したコードです。

    <receiver android:name="androidapp.scheduler.MyBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MYBROADCASTRECEIVER" >
            </action>
        </intent-filter>
    </receiver>

以下は、次のボタンの onclicklistener に入れたコードで、呼び出しの時間を OS に通知します。

            TimePicker myTp = (TimePicker)findViewById(R.id.tpTime);
            cal.set(Calendar.YEAR,myDatePicker.getYear() );
            cal.set(Calendar.MONTH, myDatePicker.getMonth());
            cal.set(Calendar.DAY_OF_MONTH, myDatePicker.getDayOfMonth());
            cal.set(Calendar.HOUR, myTp.getCurrentHour());
            cal.set(Calendar.MINUTE, myTp.getCurrentMinute());
            cal.set(Calendar.SECOND, 0);

            Log.i("SCheduling", cal.getTime().toString());

            Intent intent = new Intent(Scheduling.this, MyBroadcastReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(Scheduling.this, 234324243, intent, 0);
            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

            Intent nextForm = new Intent(this,Sender.class);
            nextForm.putExtra("contacts", contacts);
            startActivity(nextForm);    
            Log.i("SCheduling", "everything set");

最後に、MybroadcastReceiversクラス コードを以下に示します。

public class MyBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("brreceiver", "BroadcastReciever");
        Toast.makeText(context, "schedule set!.",
                Toast.LENGTH_LONG).show();
    }
}

ここで何が欠けていますか?

4

2 に答える 2

0

次のステートメントで、Scheduling.this を this.getApplicationContext() に変更します。

PendingIntent pendingIntent = PendingIntent.getBroadcast(Scheduling.this, 234324243, intent, 0);
于 2013-05-21T09:51:01.713 に答える
0

コードは正しかったようですが、問題はエミュレーターにありました。エミュレータの何が問題なのかはまだわかりませんが、コードを再度テストしたところ、機能し、ログの出力を受け取りました。

于 2013-05-22T03:16:47.687 に答える