Police said the co-pilot, who has asked to be granted asylum, took control of the plane when the pilot went to the toilet, then landed and left through the window on a rope.
Authorities said the situation was under control and no passengers or crew had been injured.
Flight ET 702 had been diverted from its original destination of Rome. The airline earlier said the flight from the Ethiopian capital Addis Ababa had been “forced to proceed” to Geneva.
An Ethiopian government spokesman, Redwan Hussein, told Reuters the flight had made a scheduled stop in the Sudanese capital, Khartoum, where he said the hijacker or hijackers might have boarded the flight.
“We don’t know where they are from or how many they are but it looks like the hijacker or hijackers boarded the flight in Khartoum,” Redwan told Reuters shortly before police announced they had detained the co-pilot.
The authenticity of the recording could not be independently verified and it was not immediately clear whether it was a hijacker or pilot speaking from the plane.
A flight tracking app showed the flight circling over the Swiss city several times before landing.
“Hijacker held, situation under control, no injuries,” Swiss police said in a message to media.
An Ethiopian Airlines statement said flight 702 “on scheduled service departing from Addis Ababa at 00:30 (local time) scheduled to arrive in Rome at 04:40 (local time) was forced to proceed to Geneva airport.
“Accordingly, the flight has landed safely at Geneva airport. All passengers and crew are safe at Geneva airport,” it said.