Android onCreate()在永久循环中执行
App的基本理念是: 1)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
广播接收器
,接收短信
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();
}
}