Yep, that sounds right. You can inherit from AbstractWalletListener to avoid having to implement empty methods.
Unless you use an external index of the block chain, there is no way to know about transactions to an address without actually scanning through it.