Yeah, a hydrometer is the only way to be sure...but also if you are patient and just let it sit 3 weeks in primary, that pretty much ensures fermentation is compelte as well, plus the aging will typically help the final beer flavor.
I have actually never checked my FG in teh fermentation bucket to see if it is done...I prefer to simply wait rather than mess with pulling out a sample for the hydrometer, adding a potential point of infection, multiple times over a few days. I just wait 3 weeks, and it is always good.
I had one weird brew, that for whatever reason continued to spit out airlock bubbles every couple minutes even after 3 weeks. I knew it was done, and went ahead with bottling it. Turned out great. I also had one batch that I never saw a single bubble come out...but, I waited 3 weeks, and when you opened the lid you could smell that something had happened, so I bottled it up. Turned out great. Airlock bubbles can be deceiving, both the lack of bubbles or extra bubbles. People swear by their FG readings, and there is nothing wrong with that, but time has worked for me so far through 19 batches.
I should mention, I always take a FG from my bottling bucket so I can figure out my ABV and fine-tune my process/recipe creation, but if I want to know my fermentation is done, all I do is look at the brew-date I have written on the bucket and add 3 weeks.