Java onReceive()被调用一次,然后应用程序异常关闭

Java onReceive()被调用一次,然后应用程序异常关闭,java,android,eclipse,Java,Android,Eclipse,我的类中的onReceive()侦听SMS并发送一条短信作为回复,一切正常,只有一次。发送短信后,应用程序关闭,并显示消息“不幸的是,你的应用程序已停止”。我希望它保持活动状态。我不知道我错过了什么。谢谢你的帮助 public class SMSReceiver extends BroadcastReceiver { private static final String SMS_RECEIVED="android.provider.Telephony.SMS_RECEIVED"; privat

我的类中的onReceive()侦听SMS并发送一条短信作为回复,一切正常,只有一次。发送短信后,应用程序关闭,并显示消息“不幸的是,你的应用程序已停止”。我希望它保持活动状态。我不知道我错过了什么。谢谢你的帮助

public class SMSReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED="android.provider.Telephony.SMS_RECEIVED";
private static final String TAG="SMSReceiver";
@Override
public void onReceive(Context context,Intent intent){
    SmsManager smsManager=SmsManager.getDefault();
    int i;
    Toast.makeText(context,"Intent recieved",Toast.LENGTH_LONG).show();
    Log.i(TAG,"Intent recieved: "+intent.getAction());
    String messageContent="";

             if (intent.getAction() == SMS_RECEIVED) {
                 Bundle bundle = intent.getExtras();
                 if (bundle != null) {

                     Object[] pdus = (Object[])bundle.get("pdus");
                     final SmsMessage[] messages = new SmsMessage[pdus.length];
                     for (i = 0; i < pdus.length; i++) {
                         messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                         messageContent=messages[i].getMessageBody().toString();
                     }
                     if (messages.length > -1 && messageContent.charAt(8)=='#') {
                         Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
                         Toast.makeText(context, "Message received from victim: "+messageContent, Toast.LENGTH_LONG).show();
                         smsManager.sendTextMessage("+919032687185",null,"Request#",null,null);
                         //Toast.makeText(context, "SMS sent.",Toast.LENGTH_LONG).show();
                         /*for(i=0;i<7;i++){
                             MediaPlayer mediaPlayer=MediaPlayer.create(context, R.raw.fire_engine_siren_could_be_police_ambulance_etc);
                             mediaPlayer.start();
                         }*/
                     }
                     /*else if(messages.length > -1 && messageContent.charAt(6) == '#'){



                         Log.i(TAG, "Location from patrol" + messages[0].getMessageBody());
                         Toast.makeText(context, "Message received from ambulance: "+messageContent, Toast.LENGTH_LONG).show();
                     }*/
                 }
             }

}
公共类SMSReceiver扩展了BroadcastReceiver{
私有静态最终字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
私有静态最终字符串TAG=“SMSReceiver”;
@凌驾
公共void onReceive(上下文、意图){
SmsManager SmsManager=smsmsmanager.getDefault();
int i;
Toast.makeText(上下文,“接收的意图”,Toast.LENGTH_LONG.show();
Log.i(标记“Intent received:+Intent.getAction());
字符串messageContent=“”;
if(intent.getAction()==SMS_已接收){
Bundle=intent.getExtras();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
最终SmsMessage[]消息=新SmsMessage[pdus.length];
对于(i=0;i-1&&messageContent.charAt(8)='#'){
Log.i(标记“MessageReceived:+messages[0].getMessageBody());
Toast.makeText(上下文,“从受害者收到的消息:+messageContent,Toast.LENGTH_LONG).show();
smsManager.sendTextMessage(“+919032687185”,null,“Request#”,null,null);
//Toast.makeText(上下文,“SMS已发送”,Toast.LENGTH_LONG.show();
/*对于(i=0;i-1&&messageContent.charAt(6)='#'){
Log.i(标记,“来自巡逻的位置”+消息[0].getMessageBody());
Toast.makeText(上下文,“从救护车收到的消息:“+messageContent,Toast.LENGTH_LONG).show();
}*/
}
}
}

}

您似乎得到了
java.lang.StringIndexOutOfBoundsException
,我猜罪魁祸首是
messageContent.charAt(8)
,因为logcat指示
length=8;index=8


如果需要查找此#的位置,请尝试使用。它更灵活,不会向您抛出异常。

LogCat怎么说?显示LogCat输出以查看应用程序崩溃的位置。首先调用应用程序记录了2条LogCat消息,第二次调用时只记录了一条,即“Intent received:android.provider.Telephony.SMS_received”。这意味着再次调用onReceive(),然后应用程序崩溃。上面提到的logcat消息仅属于onReceive()方法。02-07 08:50:30.314:W/dalvikvm(20951):threadid=1:线程退出时出现未捕获的异常(group=0x419a5c98)02-07 08:50:30.314:W/dalvikvm(20951):threadid=1:发生未捕获异常02-07 08:50:30.315:W/System.err(20951):java.lang.RuntimeException:无法启动receiver com.example.androidxambulance.smsreiver:java.lang.StringIndexOutOfBoundsException:长度=8;索引=8是,当收到的短信长度小于8个字符时,StringIndexOutOfBoundsException正在停止应用程序。