If I run an app using the texting component with SendMessageDirect on Android 13, permissions for SMS are requested (then can be granted) on first run of the app.
Running the same app on Android 16, permissions are refused, I have to go into the app settings and "Allow restricted settings" then "allow SMS" before the app will run.
Such an app will not be distributed via Google Play Store.
Is the setting of SMS permissions manually the only approach now, given Google's ever decreasing circles of pain in this area ?
Yes, unfortunately, manual intervention via the Android settings is now the only approach for sideloaded apps. You have hit the nail on the head regarding Google's "ever-decreasing circles of pain."
Why this happens on Android 15 & 16
Google introduced strict behavioral shifts starting with Android 15 and continuing forward into Android 16:
Hard-Restricted Permissions: SEND_SMS and RECEIVE_SMS have been reclassified as "hard-restricted" permissions specifically for apps not installed from a verified app store (like Google Play).
Sideloading Penalty: When you sideload an APK (compiled from App Inventor) via USB or a direct download, Android flags it as a higher security risk. It completely blocks the standard runtime permission dialog from popping up on first run, graying out the option entirely in standard settings.
The New Workflow
Because the OS blocks the runtime prompt entirely, your users have to perform the exact multi-step "dance" you described to manually override it:
Attempt to toggle the SMS setting inside the app (which fails, but triggers the restriction flag).
Go to Settings > Apps > [Your App Name].
Tap the three-dot menu ⋮ in the top right corner and select "Allow restricted settings" (and authenticate with a PIN/Biometrics).
Go back to Permissions > SMS and finally change it to "Allow".
Any workarounds?
If you are not distributing via the Google Play Store, your options to bypass this are virtually nonexistent because the restriction is enforced at the Android OS kernel/package installer level, completely out of App Inventor's control.
The only practical alternatives depend on your target audience:
If this is an app for clients/public use (outside Play Store): You will need to create a clear onboarding screen inside your App Inventor app. Use a couple of screenshots or a text guide explaining the "Allow restricted settings" dance before they can use the SMS functionality.
If you are distributing through alternative stores: Distributing your app via some managed enterprise platforms or specialized developer ecosystems can sometimes bypass this restriction, but standard .apk sideloading will trigger it every single time on Android 15+.
Pivot away from Direct SMS (if possible): If the manual steps are too high a barrier for your users, you may have to fall back to the standard SendMessage block instead of SendMessageDirect. This passes the message to the device's native texting app, requiring the user to press "Send" manually but bypassing the restricted permissions entirely.
@ewpatton , thank you for confirming what I was finding, and that App Inventor cannot circumvent what Android has put in place. I was further intrigued, given I use a de-googled phone, running GrapheneOS, which still demonstrated this behaviour. Apparently, the GrapheneOS developers have left restricted settings in place in their AOSP for security purposes (protecting the app installer, user, from themselves!)
I have no issue with this, and consider providing instructions for app installers (users) a simple solution to giving such required permissions. It is just good to know that this is necessary.
An example of instructions that could be provided:
This app uses services [list here] that require you to give special permission
in order that they can operate.
To authorise these restricted permission/s for this app, you must manually
enable them through the following steps:
* Navigate to Settings > Apps > [App Name].
* Tap the three-dot menu in the top-right corner of the screen.
* Select "Allow restricted settings" to unblock the app's ability to use the
required services.
* Now navigate to this apps Permissions section:
Settings > Apps > [App Name] > Permissions.
* Select the permission required and change this to Allow.
* Do the same for any other permissions required.
This mechanism acts as a safeguard against malicious or poorly coded apps
gaining unnecessary control over your device, ensuring that you explicitly
opt-in to these high-privilege access levels.
I can also setup the Screen1.When Error Occurs block to at least handle the Appinventor runtime error, perhaps showing the instructions, then taking the user to Settings > Apps. Can't stop the OS message though.