Android 收到短信时强制关闭对话框

Android 收到短信时强制关闭对话框,android,android-intent,android-emulator,sms,broadcastreceiver,Android,Android Intent,Android Emulator,Sms,Broadcastreceiver,我写了一个程序,用Android发送和接收短信。发送短信成功,但当目标手机收到短信时,会显示强制关闭对话框。单击后,将打开收到的SMS 我想收到的短信显示在一个文本视图,我把一个页面 SmsReceiver.java public class SmsReceiver extends BroadcastReceiver { public String str = ""; @Override public void onReceive

我写了一个程序,用Android发送和接收短信。发送短信成功,但当目标手机收到短信时,会显示强制关闭对话框。单击后,将打开收到的SMS

我想收到的短信显示在一个文本视图,我把一个页面

SmsReceiver.java

public class SmsReceiver extends BroadcastReceiver
    {
        public String str = "";
         @Override
            public void onReceive(Context context, Intent intent) 
            {
                //---get the SMS message passed in---
                Bundle bundle = intent.getExtras();        
                SmsMessage[] msgs = null;

                if (bundle != null)
                {
                     //Object[] smsExtra = (Object[]) bundle.getSMS_EXTRA_NAME);
                    //---retrieve the SMS message received---
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    msgs = new SmsMessage[pdus.length]; 
                    //for put sms in database---------------------
                   // ContentResolver contentResolver = context.getContentResolver();
                    //End for put sms in database---------------------
                    for (int i=0; i<msgs.length; i++){
                        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);    
                       // SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);

                        str += "SMS from " + msgs[i].getOriginatingAddress();                     
                        str += " :";
                        str += msgs[i].getMessageBody().toString();
                        str += "\n";  
                    }

                    //---display the new SMS message---
                // Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
                   Intent act=new  Intent(context,MainActivity.class);
                   act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                   act.putExtra("message",str);
                   context.startActivity(act);

                }                  
            }
        }

尝试测试此代码,我已经基于您的代码实现了一个示例项目代码:

public class MainActivity extends Activity {
    private TextView showSms;
    private String   ReceivedSms;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        super.onCreate(savedInstanceState);
        // _smsReceiver.onReceive(getBaseContext(), getIntent());
        setContentView(R.layout.activity_main);
        Intent _intent = getIntent();
        ReceivedSms = _intent.getStringExtra("message");
        showSms = (TextView) this.findViewById(R.id.txt_Show);
        showSms.setText(ReceivedSms);

    }


}

public class SmsReceiver extends BroadcastReceiver {
    public String str = "";

    @Override
    public void onReceive(Context context, Intent intent) {
        // ---get the SMS message passed in---
        Bundle bundle = intent.getExtras();
        SmsMessage[] msgs = null;

        if (bundle != null) {
            // Object[] smsExtra = (Object[]) bundle.getSMS_EXTRA_NAME);
            // ---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];
            // for put sms in database---------------------
            // ContentResolver contentResolver = context.getContentResolver();
            // End for put sms in database---------------------
            for (int i = 0; i < msgs.length; i++) {
                msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                // SmsMessage sms =
                // SmsMessage.createFromPdu((byte[])smsExtra[i]);

                str += "SMS from " + msgs[i].getOriginatingAddress();
                str += " :";
                str += msgs[i].getMessageBody().toString();
                str += "\n";
            }

            // ---display the new SMS message---
            // Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
            Intent act = new Intent(context, MainActivity.class);
            act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            act.putExtra("message", str);
            context.startActivity(act);

        }
    }
公共类MainActivity扩展活动{
私人文本视图显示短信;
私有字符串接收;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
//_smsReceiver.onReceive(getBaseContext(),getIntent());
setContentView(R.layout.activity_main);
Intent _Intent=getIntent();
ReceivedSms=_intent.getStringExtra(“消息”);
showSms=(TextView)this.findviewbyd(R.id.txt\u Show);
showSms.setText(ReceivedSms);
}
}
公共类SmsReceiver扩展了BroadcastReceiver{
公共字符串str=“”;
@凌驾
公共void onReceive(上下文、意图){
//---获取传入的SMS消息---
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
if(bundle!=null){
//对象[]smsExtra=(对象[])bundle.getSMS_EXTRA_NAME);
//---检索收到的短信---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
//用于将sms放入数据库---------------------
//ContentResolver ContentResolver=context.getContentResolver();
//结束将sms放入数据库---------------------
对于(int i=0;i
在清单上,确保添加权限:

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

接收方声明:

        <receiver
            android:name="com.example.sms.SmsReceiver"
            class="com.example.sms.SmsReceiver" >
            <intent-filter android:priority="100" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>


PS:删除SmsReceiver _SmsReceiver=new SmsReceiver();来自您的活动。

您能提供崩溃日志吗?这是什么意思?我不了解您所说的,您能从Logcat提供部队关闭日志吗。我在移动设备上测试此项目。因为我无法在emulator中接收sms,所以我看不到日志无法从DDMS emulator或Control view向emulator发送sms,您也可以使用get从设备上登录。它与以前一样!!!当目标手机收到短信时,在手机上显示强制关闭和关闭程序!!!!!!!!!!!!!!!!!示例项目工作正常,请编辑您的问题,添加manifest.xml文件并删除:SmsReceiver\u SmsReceiver=new SmsReceiver();来自活动。我将您的示例复制并粘贴到我的程序中!!!!我真的很累!!!!请帮帮我!!!!!!!!!它与以前一样,显示强制关闭!!!!我如何在程序中接收短信,而不是在android手机的收件箱中接收短信?请查看此链接以防止短信框接收短信:
        <receiver
            android:name="com.example.sms.SmsReceiver"
            class="com.example.sms.SmsReceiver" >
            <intent-filter android:priority="100" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>