【问题标题】:IntentService won't start using AlarmManagerIntentService 不会开始使用 AlarmManager
【发布时间】:2016-03-19 21:05:38
【问题描述】:

我知道对此有很多问题,但我真的不知道我的错误在哪里。

我的服务注册在 AndroidManifest.xml 文件中

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.app" >
        ...
        <service android:name="com.example.android.app.ScheduledService">
        </service>
    </application>
</manifest>

我的服务扩展了 IntentService

public class ScheduledService extends IntentService {
    public ScheduledService() {
        super("ScheduledService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d(getClass().getSimpleName(), "I ran!");
    }
}

我的 Activity 启动服务

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d(getClass().getSimpleName(), "Setting alarm!!");

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

        Intent alarmIntent = new Intent(this, com.example.android.app.ScheduledService.class);
        PendingIntent pending = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);

        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() +
                        10 * 1000, pending);
    }
}

我在日志中没有看到任何异常。我还需要做些什么来设置闹钟吗?

【问题讨论】:

  • 在应用程序被终止后,您的服务是否会自行重新安排?我很好奇

标签: android alarmmanager


【解决方案1】:

documentation 一样,PendingIntent.getBroadcast() 用于检索将执行广播的PendingIntent,例如调用Context.sendBroadcast()

您需要改为调用PendingIntent.getService(),这将启动IntentService

PendingIntent pending = PendingIntent.getService(this, 0, alarmIntent, 0);

【讨论】:

  • 啊,谢谢。虽然我因为没有注意到这一点而感到有点尴尬。
  • 是否应该将第四个参数始终设置为 0 才能正常工作?
【解决方案2】:

仔细查看AlarmManager API 和PendingIntentAlarmManager.set() API 需要您提供的广播意图。但是,您正在尝试向服务发送广播意图,但这是无法完成的。只需创建一个BroadcastReceiver 来捕获Intent,然后您的 BR 就会启动您的服务。

【讨论】:

    【解决方案3】:

    API 说:

    通常来自 IntentSender.getBroadcast()。

    这意味着PendingIntent.getService 也可以工作。 我测试了它,它可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多