1

アプリのコンテンツを毎日更新する必要があり、そのために AlarmManager、BroadcastReceiver、および IntentService を使用しています。

Application クラスから拡張されたクラスに AlarmManager オブジェクトと setRepeating を作成します。

 private void setRecurringAlarm(Context context) {
          Intent intent = new Intent(AlarmReceiver.ACTION_ALARM);
          AlarmManager alarms = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
          final PendingIntent pIntent = PendingIntent.getBroadcast(this,
                     1234567, intent, PendingIntent.FLAG_UPDATE_CURRENT);
          alarms.setRepeating(AlarmManager.RTC,
          System.currentTimeMillis(), 10000, pIntent);
          Toast.makeText(getApplicationContext(), "started", Toast.LENGTH_SHORT).show();
        }

私のBroadcastReceiverはメッセージを正常に取得します:

  public class AlarmReceiver extends BroadcastReceiver {

    private static final String DEBUG_TAG = "AlarmReceiver";
    public static String ACTION_ALARM = "com.alarammanager.alaram";
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent downloader = new Intent(context, UpdateService.class);
        downloader.setAction(Constants.UPDATE_SERVICE);
        context.startService(downloader);
        Toast.makeText(context, "Entered", Toast.LENGTH_SHORT).show();
    }
}

しかし、BroadcastReceiver から IntentService を開始する必要もありますが、onReceiver の BroadcastReceiver メソッドからは開始されません。私のサービス:

<service android:name="com.services.UpdateService" 
        android:enabled="true">
         <intent-filter>
            <action android:name="com.service.UpdateService" />
        </intent-filter>
</service>

そしてそれのためのクラス。

public class UpdateService extends IntentService {

        public UpdateService() {
            super("UpdateService");
        }

        @Override
        protected void onHandleIntent(Intent intent) {
            Log.d("UpdateService", "About to execute MyTask");
            //  new MyTask().execute();
            Toast.makeText(getApplicationContext(), "updateService", Toast.LENGTH_SHORT).show();
        }
        // Sometimes overriding onStartCommand will not call onHandleIntent
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.i("asdasd", "here..!");
            return super.onStartCommand(intent,flags,startId);
        }
    }

私の質問は、なぜ it(IntentService) を BroadcastReceiver から呼び出すことができないのかということです。

4

1 に答える 1