说明
设置默认短信应用
val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName)
startActivity(intent)
如上代码搜索一下应该很容易看到。在初次了解时,我也是以为把自己APP的包名传进去,就可以将自己的APP设置为默认短信应用了。然而发现在弹出的选择框中找不到自己的应用。
窃以为是不支持呢!
后来才醒悟,上述代码的弹框列表是展示的具有短信处理功能的应用,而我的应用并没有处理短信的功能,(其实不管有没有实际的短信处理逻辑)最主要的是并未告诉系统我有短信处理的能力(假装我有短信处理的能力)。那么如何告诉系统呢?答案是:配置应用清单文件咯。
代码步骤
-
必须注册 BROADCAST_SMS Receiver
<receiver android:name=".SmsReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="2147483647"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.provider.Telephony.SMS_DELIVER" /> </intent-filter> </receiver>
-
必须注册 SEND_RESPOND_VIA_MESSAGE Service
<service android:name=".SmsSendService" android:exported="true" android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"> <intent-filter> <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> <data android:scheme="mmsto" /> </intent-filter> </service>
-
必须注册 收发短信 的Activity
<activity android:name=".SmsActivity"> <intent-filter> <action android:name="android.intent.action.SEND"/> <action android:name="android.intent.action.SENDTO"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="sms"/> <data android:scheme="smsto"/> <data android:scheme="mms"/> <data android:scheme="mmsto"/> </intent-filter> </activity>
-
必须注册 BROADCAST_WAP_PUSH 的Receiver
<receiver android:name=".MmsReceiver" android:permission="android.permission.BROADCAST_WAP_PUSH"> <intent-filter> <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER"/> <data android:mimeType="application/vnd.wap.mms-message"/> </intent-filter> </receiver>
如上配置之后(直接贴到清单文件中,即使报红也没事),自己的APP就可以进入默认短信应用的可选项列表中了。
当然这样也仅仅只是达到这个目的了,简单说就是通过上述配置欺骗了系统,让系统以为你有短信的各种处理能力(实际并没有)。
PS: 即使把默认短信应用修改为了你自己应用,并不会影响系统原有应用的功能发挥。即并不是完全接管取缔了系统默认应用。
网友评论