Android onCreate()在永久循环中执行

Android onCreate()在永久循环中执行,android,sms,broadcastreceiver,oncreate,Android,Sms,Broadcastreceiver,Oncreate,App的基本理念是: 1) 广播接收器,接收短信 2) 当收到短信时,会调用另一个活动来发送另一条短信 问题是,当BroadcastReceiver调用另一个活动(SMSMessaging)时,它的onCreate方法会被一次又一次地调用,因此SMS会一次又一次地发送。我的代码在下面,请帮帮我 这是我的广播接受者课程: package com.example.testing; import java.util.Arrays; import java.util.List; import andr

App的基本理念是:

1)
广播接收器
,接收短信

2) 当收到短信时,会调用另一个活动来发送另一条短信

问题是,当
BroadcastReceiver
调用另一个活动(SMSMessaging)时,它的
onCreate
方法会被一次又一次地调用,因此SMS会一次又一次地发送。我的代码在下面,请帮帮我

这是我的广播接受者课程:

package com.example.testing;

import java.util.Arrays;
import java.util.List;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        Bundle bundle = intent.getExtras();
        SmsMessage[] recievedMsgs = null;
        String str = "";
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            recievedMsgs = new SmsMessage[pdus.length];
            for (int i = 0; i < recievedMsgs.length; i++) {
                recievedMsgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                str += "SMS from " +
                recievedMsgs[i].getOriginatingAddress() +
                " :" +
                recievedMsgs[i].getMessageBody().toString();
            }
            try {
                Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

                Intent i = new Intent(context,SMSMessaging.class);  
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                context.startActivity(i);  
                Toast.makeText(context,"Yahoo",Toast.LENGTH_SHORT).show();
            } catch (Exception e) {

            }
        }
    }
}
这是显而易见的事情。 当您收到任何短信息时,您的
接收器会收到通知,然后您会从
SMSMessaging
活动发送新的短信息,因此新的短信息也会在
接收器上通知您,您的
SMSMessaging
会再次发送新的消息,因此这些事情将永远重复


因此,您需要重新设计您的逻辑。

这里的简单答案是,不要从Activity发送短信,而是从BroadCastReceiver发送。我从未看到
finish()
调用
onCreate
本身


试着自己从接收者那里呼叫/发送sendSms。

我远不是这方面的专家,但我猜是你的悬挂物造成了麻烦。在文档中,它表示一旦消息被发送或发送失败,就会广播此意图。现在,这个广播是否会一次又一次地重新启动你的短信发送活动?哦,是吗,你的意思是说,他的接收器也会在每次发送短信时被呼叫。如果是这样的话!!你解决了很多开发者的一个大问题。新的短信被发送到另一个号码。为什么会通知我的接收者?@user2279715:您的接收者是否在清单文件中列出了以下意图:android.provider.Telephony.SMS_已收到?是的,尽管OP存在问题,但代码如下,在
onCreate()中调用
finish()
是完全合法的,Android文档甚至指定了Android在这种情况下应该做什么,即在不呈现活动的情况下转发活动。@ClassStacker是的,但这不是OP使用的好方法。@AndroidHusiast:是的,它起作用了。但是如果我想从另一个活动发送它呢?那我该怎么办呢。请引导me@both:我调用finish()只是想看看它是否解决了我的问题。i、 这个方法不再被无限次调用,但它不起作用。我会移除它!现在没用了@user2279715我看不出有什么好的理由仅仅为了发送一条信息而开始一项新活动,你能告诉我们,为什么要创建新活动来完成这项工作吗?
package com.example.testing;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SMSMessaging extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, SMSMessaging.class), 0);                
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage("03331234567", null, "auto sending ", pi, null);     
        finish();
    }
}