我只想问是否有人知道或有一个适用于 android 的 SMS 接收器/处理程序代码。因为我已经在网上搜索了好几天,但我仍然没有看到更新的代码,大多数似乎已经弃用了他们的代码,就像这里的http://mobiforge.com/developing/story/sms-messaging-如果有人能教我在应用程序中接收短信的新代码,我将不胜感激。谢谢!
4215 次
3 回答
4
我最近刚刚实现了一个有效的 BroadcastReceiver 来处理 SMS 消息。关键部分是清单和广播接收器。
在清单中,您需要 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
}
}
一切都如我所愿,我可以停止烧毁我的短信津贴测试
于 2012-03-27T23:09:09.797 回答
0
如果您android.telephony.gsm.SmsMessage
用android.telephony.SmsMessage
. 这只是关于倾听android.provider.Telephony.SMS_RECEIVE
。
于 2012-01-30T16:12:44.037 回答
0
这里有一个线程,其中包含执行您要求的代码。请注意,那里的答案有一些更正。
于 2012-01-30T16:17:21.983 回答