TRhe following code is from the project.
The Notification icon will be displayed when I launch bindService()
, it's Ok.
But the Notification icon will be cleaned when I lauch unbindService()
, why? I can't find any code to clean Notification icon in following code.
MainActivity.kt
class MainActivity : AppCompatActivity(), View.OnClickListener {
val mTAG = MainActivity::class.java.simpleName
// Variable for storing instance of our service class
var mService: MyBoundService? = null
// Boolean to check if our activity is bound to service or not
var mIsBound: Boolean? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
startServiceButton?.setOnClickListener(this)
stopServiceButton?.setOnClickListener(this)
startActivityButton?.setOnClickListener(this)
}
private val serviceConnection = object : ServiceConnection {
override fun onServiceConnected(className: ComponentName, iBinder: IBinder) {
Log.d(mTAG, "ServiceConnection: connected to service.")
// We've bound to MyService, cast the IBinder and get MyBinder instance
val binder = iBinder as MyBinder
mService = binder.service
mIsBound = true
getRandomNumberFromService() // return a random number from the service
}
override fun onServiceDisconnected(arg0: ComponentName) {
Log.d(mTAG, "ServiceConnection: disconnected from service.")
mIsBound = false
}
}
/**
* Method for listening to random numbers generated by our service class
*/
private fun getRandomNumberFromService() {
mService?.randomNumberLiveData?.observe(this
, Observer {
resultTextView?.text = "Random number from service: $it"
})
}
override fun onDestroy() {
super.onDestroy()
// Unbinding to the service class
unbindService()
}
private fun bindService() {
Intent(this, MyBoundService::class.java).also { intent ->
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)
}
}
private fun unbindService() {
Intent(this, MyBoundService::class.java).also { intent ->
unbindService(serviceConnection)
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.startServiceButton -> {
bindService()
}
R.id.stopServiceButton -> {
if (mIsBound == true) {
unbindService()
mIsBound = false
}
}
R.id.startActivityButton -> {
val intent = Intent(this, ResultActivity::class.java)
startActivity(intent)
}
}
}
}
MyBoundService.kt
class MyBoundService : Service() {
...
override fun onBind(intent: Intent): IBinder? {
return mBinder
}
override fun onCreate() {
super.onCreate()
Log.d("MyBoundService", "onCreate called")
startNotification()
Handler().postDelayed({
val randomNumber = mGenerator.nextInt(100)
randomNumberLiveData.postValue(randomNumber)
}, 1000)
}
private fun startNotification() {
val channel = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel(
CHANNEL_ID,
"My Channel",
NotificationManager.IMPORTANCE_DEFAULT
)
} else {
TODO("VERSION.SDK_INT < O")
}
(getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).createNotificationChannel(channel)
val notification: Notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("A service is running in the background")
.setContentText("Generating random number").build()
startForeground(1, notification)
}
}
from Will unbindService clean Notification icon automatically in Android Studio?
No comments:
Post a Comment