如何接收文本短信到特定端口..

时间:2010-04-28 05:13:47

标签: android

如何将文本短信接收到特定端口?我一直在寻找这个问题的答案,但无济于事。这已被问过几次,但似乎没有人有明确的答案。我的代码如下:

- 显示文件 -

<receiver android:name=".SMSRecieve" android:enabled="true"> 
<intent-filter> 
<action android:name="android.intent.action.DATA_SMS_RECEIVED"/> 
<data android:scheme="sms" /> 
<data android:host="localhost" /> 
<data android:port="15005" /> 
</intent-filter> 
</receiver>

- 短信发送方式 -

String messageText = msgTxt.getText().toString(); 
short SMS_PORT = 15005; 
SmsManager smsManager = SmsManager.getDefault(); 
smsManager.sendDataMessage("5556", null, SMS_PORT, messageText.getBytes(), null, null); 

- 广播接收器代码 -

static final String ACTION = "android.intent.action.DATA_SMS_RECEIVED"; 
//static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";(tried this too, but failed) 

if (intent.getAction().equals(SMSNotifyExample.ACTION)) { 
...do some work.. 
}

我还尝试将android:name替换为android.provider.Telephony.SMS_RECEIVED,但结果是一样的。

我的应用程序未在指定端口上收到SMS。删除以下行后,它可以正常工作:

<data android:scheme="sms" /> 
<data android:host="localhost" /> 
<data android:port="15005" /> 

你能说一下我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

感谢提示!

我使用它并且它有效:

        <receiver android:name=".SMSReceiver">
        <intent-filter android:priority="10">
        <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
            <data android:scheme="sms" />
            <data android:port="50009" />
        </intent-filter>
    </receiver>

答案 1 :(得分:2)

[注意:我在下面提到的代码无法在模拟器上运行,但在具有Android V2.3的LG P350上成功运行]

我使用了mobiForge上给出的演示代码,但已将 sendTextMessage()更改为 sendDataMessage(),并将PORT_NO更改为8901(也转换为文本数据)到byte []数据)。 我的接收者是:

<receiver android:name=".SMSReceiver"> 
        <intent-filter>
        <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
            <data android:scheme="sms" /> 
            <data android:port="8901" /> 
        </intent-filter> 
</receiver> 

一个工作示例是KRVarma's SMSDemo,它也是有效的。