android - 在 Android 上使用 Alarm Manager 启动服务?

标签 android service alarmmanager

您好,阅读了其他与此相关的问题,但答复从未解决我的问题。

我想在特定时间后使用警报管理器启动服务

    alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);

    alarmServiceIntent=new Intent(ListActivity.this, AlarmLevelServiceImproved.class);
    alarmServiceIntent.putExtra("username",usernameID);
    alarmServiceIntent.putExtra("password",userPass);
    alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmServiceIntent, 0);

    . . .

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND,10);
    //calendar.set(Calendar.HOUR_OF_DAY, 19);

    //alarmMgr.setInexactRepeating(AlarmManager.RTC,calendar.getTimeInMillis(),
    //        AlarmManager.INTERVAL_HALF_HOUR,alarmIntent);
    //alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
    //        1000 * 10, alarmIntent);
    alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
    Log.d("MioLog", "Alarm setted");

我的服务是:

public class AlarmLevelServiceImproved extends Service {

@Override
public void onCreate() {
    Log.d("MioLog","MyAlarmService.onCreate()");
    Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
}
@Override
public IBinder onBind(Intent intent) {
    Log.d("MioLog","MyAlarmService.onBind()");
    Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
    return null;
}
@Override
public void onDestroy() {
    super.onDestroy();
    Log.d("MioLog","MyAlarmService.onDestroy()");
    Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d("MioLog","MyAlarmService.onStart()");
    Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();
    return super.onStartCommand(intent, flags, startId);

}
}

然后我在 AndroidManifest.xml 中添加这个(服务类在子包“服务”中):

 <service
        android:name=".services.AlarmLevelServiceImproved"
        android:enabled="true" />

但是服务没有启动,也没有打印日志。

知道如何使用 AlarmManager 启动服务吗?

我也成功了 this tutorial但我没有发现我的代码有任何区别

谢谢

最佳答案

要使用 PendingIntent 启动服务,您需要使用静态方法 PendingIntent.getService() 来检索适当的 PendingIntent。

无论出于何种原因,您的代码似乎都在使用 PendingIntet.getBroadcast()。如果您打算让 AlarmManager 确实发送广播,您可以在 BroadcastReceiver 中启动您的服务,否则将该行更改为 getService():

来自

alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmServiceIntent, 0);

alarmIntent = PendingIntent.getService(getApplicationContext(), 0, alarmServiceIntent, 0);

关于android - 在 Android 上使用 Alarm Manager 启动服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28542726/

相关文章:

android - 在 Azure 管道上运行 Android 模拟器存在性能问题

android - 从 WorkManager API 级别 29+ 启动 Activity

c# - 将 RTC_WAKEUP 与 Xamarin 结合使用

Android:AlarmManager 和 PendingIntent 不会从另一个 Activity 中取消

android - 使用重构工具在 Android Studio 中从 PlusClient 迁移到 GoogleApiClient

android - targetSDK 28 应该使用什么版本的支持库?

java - Android 中的联系人列表排序

java - 安卓共享服务?

android - Android 中的通知服务

BOOT_COMPLETED 上的 Android BroadcastReceiver 不启动警报