我写了短信应用程序来接收/发送Galaxy s5的短信(Kitkat 4.4.2)。一切正常但我的应用程序写入SMS提供程序,因此应用程序必须是默认的SMS应用程序。我根据 - http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html添加了所需的权限。但我不想读取/发送mms消息。是否可以通过本机短信/ mms应用程序接收mms(无默认值)并通过我的应用程序接收/发送短信(默认)?我知道要发送mms本机app必须设置为默认,但我只是考虑接收。现在我的应用程序是默认的,我有空的mms reciver,当用户收到mms时,它会丢失。
嗯....也许我可以通过onReceive()
方法从我的应用程序中将mms保存到SMS提供程序,然后启动本机(无默认)sms / mms应用程序来显示它们?这是好主意吗?我怎么能这样做?
MmsReceiver
public class MmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
的Manifest.xml
<receiver
android:name="com.mateusz.simplesmsapp.broadcasts.MmsReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_WAP_PUSH" >
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVE" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
答案 0 :(得分:1)
也许我可以通过onReceive()方法从我的应用程序中将mms保存到SMS提供程序,然后启动本机(无默认)sms / mms应用程序来显示它们吗?
我想,这是可能的,但我认为它最终不会很好。要做到这一点,您的应用首次启动时需要使用Telephony.Sms.getDefaultSmsPackage()
获取已设置的默认应用,并存储此包名称,以便在您的应用收到MMS收据后启动它。这部分我认为没有问题。
现在降级的应用尝试发送彩信时会出现问题。引用您链接的博客:
虽然当您的应用不是默认的短信应用时,系统会将发送的短信写入短信提供商,但不写入已发送的彩信
现在,这可能是可以接受的,如果您的应用也可以执行外发写入。我看到的第一个问题是,据我所知,在发送彩信时没有系统范围的广播,所以你的应用程序不会知道它正在发生,更不用说访问未明确传递给它的数据了。其次,再次引用:
虽然您的应用未被选为默认应用,但您必须了解对应用的限制并根据需要禁用功能
假设平台应用遵循这些规定的做法,当它不再是默认时,它可以很好地禁用其传出的MMS功能。但是,即使它没有,它从它的直接发送恢复到通过Intent将请求和数据传递给默认应用程序,那么,此时你正在处理传入和传出的MMS,从而击败了整点你的解决方法。
最后,让您的应用完全合规可能更容易。