IntentService不会开始使用AlarmManager

时间:2014-03-14 01:46:26

标签: android alarmmanager

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

我的服务已在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!");
    }
}

我的活动启动服务

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);
    }
}

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

3 个答案:

答案 0 :(得分:25)

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

您需要拨打PendingIntent.getService(),这将启动IntentService

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

答案 1 :(得分:1)

仔细查看AlarmManager API和PendingIntentAlarmManager.set() API期待您提供的广播意图。但是,您正在尝试向服务发送广播意图,这是无法完成的。只需创建一个BroadcastReceiver即可抓住Intent,然后您的无线网络应该开始提供服务。

答案 2 :(得分:0)

API说:

  

通常来自IntentSender.getBroadcast()。

这意味着PendingIntent.getService也可以运作。 我测试了它,它确实有用。