【问题标题】:Auto reply SMS with onReceive [duplicate]使用 onReceive 自动回复短信 [重复]
【发布时间】: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>

【问题讨论】:

  • 您通常不会直接调用BroadcastReceiveronReceive() 方法,当然您也不想通过SMS 这样做。你到底想做什么?您只想捕获传入的消息吗?
  • 我希望我的应用在与另一条短信一起说出特定短语时回复短信
  • 我做错了吗?当我问一个简单的问题时,为什么人们会投反对票?
  • 那你需要注册BroadcastReceiver。如果您只想在 MapsActivity 运行时收听消息,请使用 registerReceiver() 方法。如果你想在你的应用没有运行时也能收到消息,那么你需要在清单中注册 Receiver 类,如this post所示。
  • 您可能会被否决,因为 a) 您并不清楚您要做什么,并且 b) 这里已经有数百个问题展示了如何接收 SMS。跨度>

标签: android android-intent sms android-context


【解决方案1】:

尝试更新您的清单文件:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<!-- inside your application tag -->
<receiver android:name=".IncomingSMSReceiver">
    <intent-filter android:priority="2147483647" >
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

【讨论】:

  • 我想在 onCreate() 下调用 onReceive,但我不知道在receiver.OnReceive() 的括号里放什么。
  • 我认为您应该阅读有关 onReceive 的文档以进一步了解它。你的问题越来越不确定。 developer.android.com/reference/android/content/…
  • 我再深入解释一下,我需要在MapsActivity类中调用onReceive方法,onReceive其实是在IncomingSMSReceiver类中,但是当我尝试调用该类时却报错因为我不知道在receiver.onReceive()的括号里放什么;在 onCreate 下形成上面的代码。我不能把它留空,我放在里面的任何东西都会产生错误
  • 错误是什么?请发布它,以便我们了解您的问题的原因。
  • Error:(69, 17) 错误:没有找到适合 onReceive() 方法的方法 IncomingSMSReceiver.onReceive(Context,Intent) 不适用(实际参数列表和形式参数列表的长度不同)方法 BroadcastReceiver。 onReceive(Context,Intent) 不适用(实际参数列表和形式参数列表长度不同)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多