To use Stellar, you must register listeners to handle service connection, disconnection, and permission results.
Lifecycle Management
- Register Listeners: Use
Stellar.addBinderReceivedListenerSticky(...) to ensure you receive a callback even if the service is already connected. Use Stellar.addBinderDeadListener(...) and Stellar.addRequestPermissionResultListener(...) for connection loss and permission changes. - Check Status: Use
Stellar.pingBinder() to verify the service is running and Stellar.checkSelfPermission() to verify permissions. - Request Permissions: Use
Stellar.requestPermission(requestCode) to prompt the user for access. - Cleanup: Always call
remove...Listener methods in onDestroy() to prevent memory leaks.
import roro.stellar.Stellar
class MainActivity : ComponentActivity() {
private val binderReceivedListener = Stellar.OnBinderReceivedListener {
Log.i("MyApp", "Stellar 服务已连接")
checkServiceStatus()
}
private val binderDeadListener = Stellar.OnBinderDeadListener {
Log.w("MyApp", "Stellar 服务已断开")
}
private val permissionResultListener =
Stellar.OnRequestPermissionResultListener {
requestCode, allowed, onetime ->
if (allowed) {
Log.i("MyApp", "权限已授予")
} else {
Log.w("MyApp", "权限被拒绝")
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Use Sticky version to trigger immediately if already connected
Stellar.addBinderReceivedListenerSticky(binderReceivedListener)
Stellar.addBinderDeadListener(binderDeadListener)
Stellar.addRequestPermissionResultListener(permissionResultListener)
}
override fun onDestroy() {
super.onDestroy()
Stellar.removeBinderReceivedListener(binderReceivedListener)
Stellar.removeBinderDeadListener(binderDeadListener)
Stellar.removeRequestPermissionResultListener(permissionResultListener)
}
private fun checkServiceStatus() {
if (!Stellar.pingBinder()) {
Log.e("MyApp", "服务未运行")
return
}
if (!Stellar.checkSelfPermission()) {
Stellar.requestPermission(requestCode = 1)
return
}
Log.i("MyApp", "服务版本: ${Stellar.version}")
Log.i("MyApp", "服务 UID: ${Stellar.uid}")
}
}