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()。
要求:重复启动后台服务
设计: 使用 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()。