在Android上启动Alarm Manager服务?

在Android上启动Alarm Manager服务?,android,service,alarmmanager,Android,Service,Alarmmanager,您好,请阅读此问题的另一个问题,但回答无法解决我的问题 我想在特定时间后使用报警管理器启动服务 alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE); alarmServiceIntent=new Intent(ListActivity.this, AlarmLevelServiceImproved.class); alarmServiceInte

您好,请阅读此问题的另一个问题,但回答无法解决我的问题

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

    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上(服务类位于子包“services”上):


但服务不会启动,也不会打印日志

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

我也起诉了,但我没有发现我的代码有什么不同


感谢要启动具有PendingEvent的服务,您需要使用静态方法
PendingEvent.getService()
来检索适当的PendingEvent

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


您正在使用
getBroadcast()
创建
pendingent
,但
Intent
指向服务。这种组合是行不通的

由于您使用的是
RTC_WAKEUP
,因此需要使用
getBroadcast()
WakeLock
来获得可靠的结果。一种方法是使用
WakefulBroadcastReceiver
作为接收器的基类,然后将工作转发到
IntentService


此外,请不要将用户名和密码作为额外信息传递,因为任何人只要接触到
Intent
pendingent
,都可以看到这些信息。在这种情况下,这应该只是你的应用程序和核心操作系统,但我仍然希望做一些更安全的事情。

好吧。。你不能从任何地方开始你的服务。。您需要像
startService(newintent(这是AlarmLevelServiceImproved.class))一样启动它是,我可以手动启动服务,但我需要该服务每X秒启动一次。如何使用AlarmManager执行此操作?
 <service
        android:name=".services.AlarmLevelServiceImproved"
        android:enabled="true" />
alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmServiceIntent, 0);
alarmIntent = PendingIntent.getService(getApplicationContext(), 0, alarmServiceIntent, 0);