As you have found, via the many questions and answers I guess you've looked at already, there is no reliable way to get this information:
TelephonyManager.getLine1Number() normally returns null, but on the rare phone that it actually returns something else, the answer cannot be relied upon since it returns the original phone number from the SIM, which due to phone number portability is rarely the phone number that the phone is currently using
The hack to look for the account name used by WhatsApp is an interesting approach, if WhatsApp is installed. Unfortunately this has now stopped working - WhatsApp no longer creates the Android account using the verified phone number as the account name.
Many apps that need this info resort to doing a round trip SMS exchange, since the outgoing SMS will carry the phone number. (Though if you do this, note that many people object to paying the cost of an SMS message, which may well be an international SMS at a premium rate, so will likely give you a bad review in the Play store).
Be aware that although not common in Western markets, there are an increasing number of Dual SIM Android phones (including the new Nokia X), so there is not a 1:1 correspondence between phone and phone number. You also have the problem if your app runs on a tablet that these don't have a phone number anyway.