我只是想问一下是否有人知道或有一个工作的SMS接收器/处理程序代码为Android。因为我已经在网上搜索了好几天,而且我还没有看到更新的代码,大多数人似乎已经弃用了代码,就像这里的代码一样http://mobiforge.com/developing/story/sms-messaging-android如果有人可以教我,我会非常感激在应用程序中接收SMS的新代码。谢谢!
答案 0 :(得分:4)
我刚刚实施了一个有效的BroadcastReceiver来处理短信。关键部分是清单和BroadcastReceiver。
在清单中,您需要RECEIVE_SMS权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
您不需要READ_SMS。您的接收者条目应如下所示:
<receiver
android:name=".IncomingSmsBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
大多数人似乎忘记的是android:exported="true"
这是必需的,因为广播来自您的应用程序之外。有些帖子建议您需要android:permission="android.permission.RECEIVE_SMS"
或android:permission="android.permission.BROADCAST_SMS"
,但事实并非如此。
我的BroadcastReceiver实现如下所示:
package smsmanager;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class IncomingSmsBroadcastReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent != null && SMS_RECEIVED.equals(intent.getAction())) {
final SmsMessage smsMessage = extractSmsMessage(intent);
processMessage(context, smsMessage);
}
}
private SmsMessage extractSmsMessage(final Intent intent) {
final Bundle pudsBundle = intent.getExtras();
final Object[] pdus = (Object[]) pudsBundle.get("pdus");
final SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);
return smsMessage;
}
private void processMessage(final Context context, final SmsMessage smsMessage) {
// Do something interesting here
}
}
一切都按照我的意愿行事,我可以停止加快我的短信津贴测试
答案 1 :(得分:0)
This如果您将android.telephony.gsm.SmsMessage
替换为android.telephony.SmsMessage
,则应该可以使用,并且不会弃用。它只是在倾听android.provider.Telephony.SMS_RECEIVE
。
答案 2 :(得分:0)
有一个帖子here,其中包含执行您要求的代码。请注意,答案中有一些更正。