我需要你的建议以完成以下任务。关键是我需要使用特定的手机号码保存我的应用程序,以便带有我的应用程序的设备只会响应来自此号码的短信,其他号码应该被标准或任何其他第三方应用程序捕获。我需要它,因为SMS应该包含可以使用特殊应用程序解码的特定数据。
那么,我该怎样做才能意识到这一点,或者我应该检查哪些野生动物:)?
一如既往,提前谢谢!
答案 0 :(得分:1)
为了做到这一点,你需要在这些方面做点什么:
RECEIVE_SMS
BroadcastReceiver
以下代码均未经过测试,更多的是起点:
<强>清单强>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<receiver android:name=".YOURSMSReceiver">
<intent-filter android:priority="SOMENUMBER">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
<强> YOURSMSReceiver 强>
public class YOURSMSReceiver extends BroadcastReceiver
{
@Override
public void onReceiver(Context context, Intent intent)
{
boolean bConsumeSms = false; // flag to consume the sms so stock app doesn't pick it up
String data = "";
if(intent.getAction().equals(android.provider.Telephony.SMS_RECEIVED))
{
Bundle bundlePdus = intent.getExtras();
Object[] pdus = (Object[])bundlePdus.get("pdus");
SmsMessage messages = SmsMessage.createFromPdu((byte[])pdus[0]);
if(messages.getOriginatingAddress() == YOURCELLNUMBER)
{
// do something with the content.
// held in: messages.getMessageBody()
data = messages.getMessageBody(); // your custom content
// consume this sms
bCOnsume = true;
}
// in order to consume the message, we have to use abortBroadcast(). But only if we've
// processed it first. If not, then the stock app, should be allowed to pick it up
if(bConsume)
{
abortBroadcast();
}
}
}
}
正如我所说,它完全没有经过测试,但理论上你所需要的一切都在那里。根据pdu数组的大小,您还必须处理多条消息,这是我一直没有想到的。祝你好运!
编辑 CommonsWare指出,4.4 Android操作系统无论如何都能提供所有短信。我没有意识到这一点。