I don't think there's a best way because there is only one way, check the call state via TelephonyManager. No need for a receiver:
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
int callState = tm.getCallState();
See this for the call state constants.