Why does my application return OnConnnected when the call hasn't been answered yet?

About Trying to place a voice call and detecting if and when a caller answers the phone is known as "call progress detection", and it is not a very easy thing to do. The telephony hardware has to be able to classify different signals such as dial tones, busy signals, ringing, operator intercepts(those "boop-boop-boop the number you have dialed is out of service" kinds of messages), as well as other things that a human caller takes for granted. Historically, voice modems were designed to answer voice calls as if it was a fancy answering machine, and not to place calls. Many voice modems have little or no call progress detection capabilities
If you need to call a number and detect when a person answers then you'll need better quality hardware & service providers like those from Dialogic, Rhetorex, etc. These voice boards cost more than most voice modems, but you get what you pay for.