【发布时间】:2016-05-30 06:46:05
【问题描述】:
我目前有一个我想使用的方法,即 OnReceive
public class IncomingSMSReceiver extends BroadcastReceiver {
private String senderNumber;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String message = "";
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
message = msgs[i].getMessageBody();
senderNumber = msgs[i].getOriginatingAddress();
}
senderNumber = msgs[0].getOriginatingAddress();
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
sendMessage(senderNumber, "Thank you for sending me a message");
}
}
我想在这个类中使用这个方法,但是我不知道在调用该方法时在括号中放什么。
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
receiver.onReceive();
谁能帮我告诉我在 onReceive() 括号里放什么?
编辑
我照你说的做了,改了代码,也没有调用ActivityMaps中的onReceive。所以这是我的代码,当“更新”短信发送给我时,它仍然不会回复“测试”短信。
public class IncomingSMSReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus.length == 0) {
return;
}
SmsMessage[] messages = new SmsMessage[pdus.length];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
sb.append(messages[i].getMessageBody());
}
String sender = messages[0].getOriginatingAddress();
String message = sb.toString();
String txtSMS="Testing";
if (message.startsWith("UPDATE"))
{
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
this.abortBroadcast();
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(sender, null, txtSMS, null, null);
}
}
}
}
我的清单文件
receiver android:name=".IncomingSMSReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="PACKAGE_NAME.android.action.broadcast"/>
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
【问题讨论】:
-
您通常不会直接调用
BroadcastReceiver的onReceive()方法,当然您也不想通过SMS 这样做。你到底想做什么?您只想捕获传入的消息吗? -
我希望我的应用在与另一条短信一起说出特定短语时回复短信
-
我做错了吗?当我问一个简单的问题时,为什么人们会投反对票?
-
那你需要注册
BroadcastReceiver。如果您只想在MapsActivity运行时收听消息,请使用registerReceiver()方法。如果你想在你的应用没有运行时也能收到消息,那么你需要在清单中注册 Receiver 类,如this post所示。 -
您可能会被否决,因为 a) 您并不清楚您要做什么,并且 b) 这里已经有数百个问题展示了如何接收 SMS。跨度>
标签: android android-intent sms android-context