4

私は持っている:

MyApp は onCreate でアプリケーションを拡張します。

sendBroadcast(refreshAlarm);

Log.d(TAG, "broadcast sent with intent " + refreshAlarm);
Log.d(TAG, "onCreate");

どこ

static final Intent refreshAlarm = new Intent(ACTION_REFRESH_RECEIVER);
public static final String ACTION_REFRESH_RECEIVER = "com.example.myapp.REFRESH_RECEIVER";

ブロードキャストレシーバー:

package com.example.myapp;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.preference.PreferenceManager;
import android.util.Log;

public class RefreshReceiver extends BroadcastReceiver
{
    private static final String TAG = "RefreshReceiver";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d(TAG, "broadcast received with intent " + intent);
        long interval = Long
                .parseLong(PreferenceManager.getDefaultSharedPreferences(
                        context).getString("delay", "900")) * 1000;

        PendingIntent operation = PendingIntent.getService(context, -1,
                new Intent(context, RefreshService.class),
                PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);

        alarmManager.cancel(operation);

        if (interval > 0)
        {
            alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                    System.currentTimeMillis(), interval, operation);
        }

        Log.d(TAG, "onReceive: delay = " + interval);
    }
}

マニフェストで宣言:

<receiver android:name="com.example.myapp.RefreshReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
         <action android:name="com.example.myapp.REFRESH_RECEIVER" />
    </intent-filter>
</receiver>

この作業を行うために必要なものはすべて揃っているように思えます。ブロードキャストは onCreate で送信されます (ログで実際に送信されていることがわかります)。ブロードキャストは、インテント フィルターを使用してインテントを受信するように宣言されてrefreshAlarmいますが、受信されず、その理由がわかりません。他に何か必要ですか?

4

5 に答える 5