Android: 警报未启动服务

Android: Alarm not starting service

要求:重复启动后台服务

设计: 使用 AlarmManager

我做了什么:

<service
    android:name=".MyService"
    android:exported="false" >
</service>

AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), SERVICE_ALARM_INTERVAL, pendingIntent);

服务 class 直接 extends Service 有:

@Override
public void onCreate() {              
    HandlerThread thread = new HandlerThread("ServiceStartArguments", Process.THREAD_PRIORITY_BACKGROUND);
    thread.start();
    //Get the HandlerThread's Looper and use it for our Handler
    mServiceLooper = thread.getLooper();
    mServiceHandler = new ServiceHandler(mServiceLooper);
    mContext = getApplicationContext();
    Toast.makeText(mContext, "Service!!!!!", Toast.LENGTH_LONG).show();
    Log.e("tag", "Service!!!");
}

问题: Toast 消息和 Log 打印未执行。

我哪里做错了?

谢谢,

试试这个

AndroidManifest.xml

<receiver android:name=".AlarmReceiver">
   <intent-filter>
        <action android:name="com.example.project.AlarmReceiver" />
   </intent-filter>
</receiver>

MainActivity.java

Intent intent = new Intent(context, AlarmReceiver.class);

intent.setAction("com.example.project.AlarmReceiver");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);

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

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), SERVICE_ALARM_INTERVAL, pendingIntent);

AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Alarm received!!!!!", Toast.LENGTH_LONG).show();
    }

}

AlarmManager 将使用广播接收器调用,如上所示

您正在使用 PendingIntent.getBroadcast() - 这会触发广播。如果你想触发一个服务,你需要使用PendingIntent.getService()