{
	"id": "e526e814-cdfc-42a0-b420-f2885ad28bce",
	"created_at": "2026-04-06T01:32:33.235288Z",
	"updated_at": "2026-04-10T13:12:31.017304Z",
	"deleted_at": null,
	"sha1_hash": "344e40a9afdad20f1978de167e289ac028caf127",
	"title": "Getting Your SMS Apps Ready for KitKat",
	"llm_title": "",
	"authors": "",
	"file_creation_date": "0001-01-01T00:00:00Z",
	"file_modification_date": "0001-01-01T00:00:00Z",
	"file_size": 125232,
	"plain_text": "Getting Your SMS Apps Ready for KitKat\r\nArchived: 2026-04-06 01:14:51 UTC\r\nPosted by Scott Main and David Braun\r\nSending and receiving SMS messages are fundamental features on mobile devices and many developers have built\r\nsuccessful apps that enhance this experience on Android. Some of you have built SMS apps using hidden APIs—a\r\npractice we discourage because hidden APIs may be changed or removed and new devices are not tested against\r\nthem for compatibility. So, to provide you with a fully supported set of APIs for building SMS apps and to make\r\nthe user experience for messaging more predictable, Android 4.4 (KitKat) makes the existing APIs public and\r\nadds the concept of a default SMS app, which the user can select in system settings.\r\nThis means that if you are using the hidden SMS APIs on previous platform versions, you need to make some\r\nadjustments so your app continues to work when Android 4.4 is released later this year.\r\nMake your app the default SMS app\r\nOn Android 4.4, only one app can receive the new SMS_DELIVER_ACTION intent, which the system broadcasts\r\nwhen a new SMS message arrives. Which app receives this broadcast is determined by which app the user has\r\nselected as the default SMS app in system settings. Likewise, only the default SMS app receives the new\r\nWAP_PUSH_DELIVER_ACTION intent when a new MMS arrives.\r\nOther apps that only want to read new messages can instead receive the SMS_RECEIVED_ACTION broadcast intent\r\nwhen a new SMS arrives. However, only the app that receives the SMS_DELIVER_ACTION broadcast (the user-specified default SMS app) is able to write to the SMS Provider defined by the android.provider.Telephony\r\nclass and subclasses. As such, it's important that you update your messaging app as soon as possible to be\r\navailable as a default SMS app, because although your existing app won't crash on an Android 4.4 device, it will\r\nsilently fail when attempting to write to the SMS Provider.\r\nhttps://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html\r\nPage 1 of 6\n\nIn order for your app to appear in the system settings as an eligible default SMS app, your manifest file must\ndeclare some specific capabilities. So you must update your app to do the following things:\nIn a broadcast receiver, include an intent filter for SMS_DELIVER_ACTION\n( \"android.provider.Telephony.SMS_DELIVER\" ). The broadcast receiver must also require the\nBROADCAST_SMS permission.\nThis allows your app to directly receive incoming SMS messages.\nIn a broadcast receiver, include an intent filter for WAP_PUSH_DELIVER_ACTION\n( \"android.provider.Telephony.WAP_PUSH_DELIVER\" ) with the MIME type \"application/vnd.wap.mms-message\" . The broadcast receiver must also require the BROADCAST_WAP_PUSH permission.\nThis allows your app to directly receive incoming MMS messages.\nIn your activity that delivers new messages, include an intent filter for ACTION_SENDTO\n( \"android.intent.action.SENDTO\" ) with schemas, sms: , smsto: , mms: , and mmsto: .\nThis allows your app to receive intents from other apps that want to deliver a message.\nIn a service, include an intent filter for ACTION_RESPONSE_VIA_MESSAGE\n( \"android.intent.action.RESPOND_VIA_MESSAGE\" ) with schemas, sms: , smsto: , mms: , and mmsto: .\nThis service must also require the SEND_RESPOND_VIA_MESSAGE permission.\nThis allows users to respond to incoming phone calls with an immediate text message using your app.\nFor example, here's a manifest file with the necessary components and intent filters:\n... https://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html\nPage 2 of 6\n\nAny filters for the SMS_RECEIVED_ACTION broadcast in existing apps will continue to work the same on Android\n4.4, but only as an observer of new messages, because unless your app also receives the SMS_DELIVER_ACTION\nbroadcast, you cannot write to the SMS Provider on Android 4.4.\nBeginning with Android 4.4, you should stop listening for the SMS_RECEIVED_ACTION broadcast, which you can\ndo at runtime by checking the platform version then disabling your broadcast receiver for SMS_RECEIVED_ACTION\nwith PackageManager.setComponentEnabledSetting() . However, you can continue listening for that broadcast if\nyour app needs only to read special SMS messages, such as to perform phone number verification. Note that—\nbeginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be\nignored so all apps interested have the chance to receive it.\nTip: To distinguish the two SMS broadcasts, imagine that the SMS_RECEIVED_ACTION simply says \"the system\nreceived an SMS,\" whereas the SMS_DELIVER_ACTION says \"the system is delivering your app an SMS, because\nyou're the default SMS app.\"\nhttps://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html\nPage 3 of 6\n\nDisable features when not the default SMS app\r\nIn consideration of some apps that do not want to behave as the default SMS app but still want to send messages,\r\nany app that has the SEND_SMS permission is still able to send SMS messages using SmsManager . If and only if\r\nan app is not selected as the default SMS app on Android 4.4, the system automatically writes the sent SMS\r\nmessages to the SMS Provider (the default SMS app is always responsible for writing its sent messages to the\r\nSMS Provider).\r\nHowever, if your app is designed to behave as the default SMS app, then while your app is not selected as the\r\ndefault, it's important that you understand the limitations placed upon your app and disable features as appropriate.\r\nAlthough the system writes sent SMS messages to the SMS Provider while your app is not the default SMS app, it\r\ndoes not write sent MMS messages and your app is not able to write to the SMS Provider for other operations,\r\nsuch as to mark messages as draft, mark them as read, delete them, etc.\r\nSo when your messaging activity resumes, check whether your app is the default SMS app by querying\r\nTelephony.Sms.getDefaultSmsPackage() , which returns the package name of the current default SMS app. If it\r\ndoesn't match your package name, disable features such as the ability for users to send new messages.\r\nWhen the user decides to use your app for messaging, you can display a dialog hosted by the system that allows\r\nthe user to make your app the default SMS app. To display the dialog, call startActivity() with the\r\nTelephony.Sms.Intents.ACTION_CHANGE_DEFAULT intent, including an extra with the\r\nSms.Intents.EXTRA_PACKAGE_NAME key and your package name as the string value.\r\nFor example, your activity might include code like this:\r\npublic class ComposeSmsActivity extends Activity {\r\n @Override\r\n protected void onResume() {\r\n super.onResume();\r\n final String myPackageName = getPackageName();\r\n if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {\r\n // App is not default.\r\n // Show the \"not currently set as the default SMS app\" interface\r\nhttps://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html\r\nPage 4 of 6\n\nView viewGroup = findViewById(R.id.not_default_app);\r\n viewGroup.setVisibility(View.VISIBLE);\r\n // Set up a button that allows the user to change the default SMS app\r\n Button button = (Button) findViewById(R.id.change_default_app);\r\n button.setOnClickListener(new View.OnClickListener() {\r\n public void onClick(View v) {\r\n Intent intent =\r\n new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);\r\n intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,\r\n myPackageName);\r\n startActivity(intent);\r\n }\r\n });\r\n } else {\r\n // App is the default.\r\n // Hide the \"not currently set as the default SMS app\" interface\r\n View viewGroup = findViewById(R.id.not_default_app);\r\n viewGroup.setVisibility(View.GONE);\r\n }\r\n }\r\n}\r\nAdvice for SMS backup \u0026 restore apps\r\nBecause the ability to write to the SMS Provider is restricted to the app the user selects as the default SMS app,\r\nany existing app designed purely to backup and restore SMS messages will currently be unable to restore SMS\r\nmessages on Android 4.4. An app that backs up and restores SMS messages must also be set as the default SMS\r\napp so that it can write messages in the SMS Provider. However, if the app does not also send and receive SMS\r\nmessages, then it should not remain set as the default SMS app. So, you can provide a functional user experience\r\nwith the following design when the user opens your app to initiate a one-time restore operation:\r\n1. Query the current default SMS app's package name and save it.\r\nString defaultSmsApp = Telephony.Sms.getDefaultSmsPackage(context);\r\n2. Request the user change the default SMS app to your app in order to restore SMS messages (you must be\r\nthe default SMS app in order to write to the SMS Provider).\r\nIntent intent = new Intent(context, Sms.Intents.ACTION_CHANGE_DEFAULT);\r\nintent.putExtra(Sms.Intents.EXTRA_PACKAGE_NAME, context.getPackageName());\r\nstartActivity(intent);\r\n3. When you finish restoring all SMS messages, request the user to change the default SMS app back to the\r\npreviously selected app (saved during step 1).\r\nhttps://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html\r\nPage 5 of 6\n\nIntent intent = new Intent(context, Sms.Intents.ACTION_CHANGE_DEFAULT);\r\nintent.putExtra(Sms.Intents.EXTRA_PACKAGE_NAME, defaultSmsApp);\r\nstartActivity(intent);\r\nPrepare to update your SMS app\r\nWe encourage you to update your apps as soon as possible to provide your users the best experience on Android.\r\nTo help you make the changes, we'll soon be providing the necessary SDK components for Android 4.4 that allow\r\nyou to compile and test your changes on Android 4.4. Stay tuned!\r\nSource: https://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html\r\nhttps://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html\r\nPage 6 of 6",
	"extraction_quality": 1,
	"language": "EN",
	"sources": [
		"MITRE"
	],
	"origins": [
		"web"
	],
	"references": [
		"https://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html"
	],
	"report_names": [
		"getting-your-sms-apps-ready-for-kitkat.html"
	],
	"threat_actors": [],
	"ts_created_at": 1775439153,
	"ts_updated_at": 1775826751,
	"ts_creation_date": 0,
	"ts_modification_date": 0,
	"files": {
		"pdf": "https://archive.orkl.eu/344e40a9afdad20f1978de167e289ac028caf127.pdf",
		"text": "https://archive.orkl.eu/344e40a9afdad20f1978de167e289ac028caf127.txt",
		"img": "https://archive.orkl.eu/344e40a9afdad20f1978de167e289ac028caf127.jpg"
	}
}