Tôi muốn gọi một dịch vụ khi một hoạt động nhất định bắt đầu. Vì vậy, đây là lớp Dịch vụ:
public class UpdaterServiceManager extends Service {
private final int UPDATE_INTERVAL = 60 * 1000;
private Timer timer = new Timer();
private static final int NOTIFICATION_EX = 1;
private NotificationManager notificationManager;
public UpdaterServiceManager() {}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// Code to execute when the service is first created
}
@Override
public void onDestroy() {
if (timer != null) {
timer.cancel();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startid) {
notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
int icon = android.R.drawable.stat_notify_sync;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, Main.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText,
contentIntent);
notificationManager.notify(NOTIFICATION_EX, notification);
Toast.makeText(this, "Started!", Toast.LENGTH_LONG);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Check if there are updates here and notify if true
}
}, 0, UPDATE_INTERVAL);
return START_STICKY;
}
private void stopService() {
if (timer != null) timer.cancel();
}
}
Và đây là cách tôi gọi nó:
Intent serviceIntent = new Intent();
serviceIntent.setAction("cidadaos.cidade.data.UpdaterServiceManager");
startService(serviceIntent);
Vấn đề là không có gì xảy ra. Khối mã trên được gọi vào cuối hoạt động onCreate. Tôi đã gỡ lỗi và không có ngoại lệ nào được ném ra.
Bất kỳ ý tưởng?
<service android:name="your.package.name.here.ServiceClass" />trong thẻ ứng dụng.
START_STICKYsẽ khởi động lại dịch vụ, nhưng sau đó chỉ onCreate được gọi và var hẹn giờ sẽ không được khởi tạo lại. Bạn có thểSTART_REDELIVER_INTENTsử dụng dịch vụ Báo thức hoặc Trình lập lịch công việc API 21 để khắc phục điều này.