我已经弄明白了如何发送和接收短信.要发送短信,我必须调用该类的sendTextMessage()和sendMultipartTextMessage()方法SmsManager.要接收SMS消息,我必须在AndroidMainfest.xml文件中注册接收器.然后我不得不重写onReceive()方法BroadcastReceiver.我在下面列举了一些例子.
MainActivity.java
public class MainActivity extends Activity {
private static String SENT = "SMS_SENT";
private static String DELIVERED = "SMS_DELIVERED";
private static int MAX_SMS_MESSAGE_LENGTH = 160;
// ---sends an SMS message to another device---
public static void sendSMS(String phoneNumber, String message) {
PendingIntent piSent = PendingIntent.getBroadcast(mContext, 0, new Intent(SENT), 0);
PendingIntent piDelivered = PendingIntent.getBroadcast(mContext, 0,new Intent(DELIVERED), 0);
SmsManager smsManager = SmsManager.getDefault();
int length = message.length();
if(length > MAX_SMS_MESSAGE_LENGTH) …Run Code Online (Sandbox Code Playgroud) 如何将文本短信接收到特定端口?我一直在寻找这个问题的答案,但无济于事.这已被问过几次,但似乎没有人有明确的答案.我的代码如下:
- 管理文件 -
<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>Run Code Online (Sandbox Code Playgroud)
--SMS发送方式 -
String messageText = msgTxt.getText().toString();
short SMS_PORT = 15005;
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendDataMessage("5556", null, SMS_PORT, messageText.getBytes(), null, null); Run Code Online (Sandbox Code Playgroud)
- 广播接收器代码 -
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..
}Run Code Online (Sandbox Code Playgroud)
我也尝试替换android:name,android.provider.Telephony.SMS_RECEIVED但结果是一样的.
我的应用程序未在指定端口上收到SMS.删除以下行后,它可以正常工作:
<data android:scheme="sms" />
<data android:host="localhost" />
<data …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中有一个要求,我需要在应用程序中集成消息.我想使用Android本机SMS API发送消息并接收它们.主要的挑战是我不想在Message应用程序中显示收到的消息.应打开所有消息并仅从我的应用程序发送.
我试过在我的广播接收者中接受以下意图:
<intent-filter>
<action android:name="android.provider.telephony.SMS_RECEIVED"></action>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
但是当消息来到我的应用程序时,同样是本机消息应用程序接收,我不想要.
我也尝试在模拟器中的特定端口上发送数据消息,它正在发送杂物但我的应用程序没有收到它以及其他模拟器上的消息本机应用程序.
意图过滤器是:
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<data android:port="8901"/>
<data android:scheme="sms"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我正在使用给定端口的sendDataMessage()函数.
是否有可能以更好,更安全的方式发送消息,以便不可能使用Android中的本机SMS API窃取您的数据?如果没有,我可以去实施相同的替代方案.