Serviceが起動しているか確認する
2021/02/05
Android
Service
LocalBroadcastManager
Androidアプリ開発において、Serviceが起動しているか他のコンポーネントから確認する方法です。
環境
- compileSdkVersion 29
- minSdkVersion 21
- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
方法
Serviceに対してBroadcastを投げて生存確認をすればServiceが起動しているか確認できます。 LocalBroadcastManager
[1] を使うと簡単です。下記のようにobjectに機能を隠蔽できると利用しやすいですね。
class SomeService : Service() {
companion object{
private const val ACTION_SERVICE_PING: String = "com.hassakulab.xxx.SomeService_is_running"
fun isActive(context: Context): Boolean{
return LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(ACTION_SERVICE_PING))
}
}
private val localBroadcastManager: LocalBroadcastManager by lazy {
LocalBroadcastManager.getInstance(this)
}
private val broadcastReceiverPing = object: BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
// nop
}
}
override fun onCreate() {
super.onCreate()
localBroadcastManager.registerReceiver(broadcastReceiverPing, IntentFilter(ACTION_SERVICE_PING))
}
override fun onBind(intent: Intent): IBinder? {}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {}
override fun onDestroy() {
localBroadcastManager.unregisterReceiver(broadcastReceiverPing)
}
}