Saya ingin memanggil layanan ketika aktivitas tertentu dimulai. Jadi, inilah kelas Service:
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();
}
}
Dan inilah cara saya menyebutnya:
Intent serviceIntent = new Intent();
serviceIntent.setAction("cidadaos.cidade.data.UpdaterServiceManager");
startService(serviceIntent);
Masalahnya adalah tidak ada yang terjadi. Blok kode di atas dipanggil di akhir aktivitas onCreate
. Saya sudah men-debug dan tidak terkecuali terlempar.
Ada ide?
android
service
android-activity
Miguel Ribeiro
sumber
sumber
START_STICKY
akan memulai ulang layanan, tetapi hanya onCreate yang dipanggil dan var pengatur waktu tidak akan diinisialisasi ulang. Anda dapat bermain denganSTART_REDELIVER_INTENT
, layanan Alarm atau Penjadwal Pekerjaan API 21 untuk memperbaikinya.<service android:name="your.package.name.here.ServiceClass" />
dalam tag application.Jawaban:
Mungkin Anda tidak memiliki layanan dalam manifes Anda, atau tidak memiliki layanan
<intent-filter>
yang cocok dengan tindakan Anda. Memeriksa LogCat (viaadb logcat
, DDMS, atau perspektif DDMS di Eclipse) akan memunculkan beberapa peringatan yang dapat membantu.Kemungkinan besar, Anda harus memulai layanan melalui:
sumber
Menulis baris ini saja tidak cukup bagi saya. Layanan masih tidak berfungsi. Semuanya bekerja hanya setelah mendaftarkan layanan di manifes
sumber
Kode Java untuk memulai layanan :
Mulai layanan dari Aktivitas :
Mulai layanan dari Fragment :
MyService.java :
Tentukan Layanan ini ke dalam File Manifes Proyek:
Tambahkan tag di bawah ini di file Manifest :
Selesai
sumber
Saya suka membuatnya lebih dinamis
jangan lupakan Manifest
sumber
tambahkan layanan di manifist
untuk menjalankan layanan di oreo dan perangkat yang lebih besar, gunakan untuk layanan darat dan tampilkan pemberitahuan kepada pengguna
atau gunakan layanan pembatasan wilayah untuk pembaruan lokasi di referensi latar belakang http://stackoverflow.com/questions/tagged/google-play-services
sumber