The app doesn't know. It just produces a widget tree, and the OS-provided renderer renders it this way or that way. In particular, it chooses not to render controls marked as "security-sensitive" when the rendering is intended for a screenshot; it could instead put empty boxes in their place, etc. The app has no idea and no control, AFAIK.
Open the amazon app. Take a screenshot. See a toast message informing you that the amazon app has detected you've taken a screenshot. Fucking used for fucking profiling.
I think at least in snap it makes sense, the communications are suppose to be ethereal and disappear after reading, I like to know when someone screenshots something and its no longer ethereal
There's an unspecified short/random delay between the user taking the screenshot and the notification firing. The trick used by Bluesky, Telegram etc is using a different technique. They (mis)use secure input fields to show an overlay when the user takes a screenshot.
Snapchat advertises that they detect screenshots. They try. But they're well aware that they can't actually know.
For example, their bug bounty program policy helpfully informs you that "screenshot detection avoidance" is not considered a vulnerability: https://hackerone.com/snapchat . That's because it's always possible.