美文网首页
设置默认短信应用

设置默认短信应用

作者: 钦_79f7 | 来源:发表于2019-12-18 11:27 被阅读0次

说明

设置默认短信应用

val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName)
startActivity(intent)

如上代码搜索一下应该很容易看到。在初次了解时,我也是以为把自己APP的包名传进去,就可以将自己的APP设置为默认短信应用了。然而发现在弹出的选择框中找不到自己的应用。

窃以为是不支持呢!

后来才醒悟,上述代码的弹框列表是展示的具有短信处理功能的应用,而我的应用并没有处理短信的功能,(其实不管有没有实际的短信处理逻辑)最主要的是并未告诉系统我有短信处理的能力(假装我有短信处理的能力)。那么如何告诉系统呢?答案是:配置应用清单文件咯。

代码步骤

  1. 必须注册 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>
    
  2. 必须注册 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>
    
  3. 必须注册 收发短信 的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>
    
  4. 必须注册 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: 即使把默认短信应用修改为了你自己应用,并不会影响系统原有应用的功能发挥。即并不是完全接管取缔了系统默认应用。

相关文章

网友评论

      本文标题:设置默认短信应用

      本文链接:https://www.haomeiwen.com/subject/dgnynctx.html