【问题标题】:Force closed dialog when SMS is received收到短信时强制关闭对话框
【发布时间】:2012-10-14 05:25:06
【问题描述】:

我编写了一个在 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);

                }                  
            }
        }

MainActivity.java

public class MainActivity extends Activity {
SmsReceiver _smsReceiver =new SmsReceiver();
private TextView showSms;
private String ReceivedSms;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        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);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

【问题讨论】:

  • 能否提供崩溃日志。
  • 这是什么意思?你说的我没看懂
  • 能否提供来自 Logcat 的强制关闭日志。
  • 我在移动设备上测试了这个项目。因为我无法在模拟器中接收短信,所以我看不到 Logcat
  • 可以从 DDMS EmulatorControl 视图向模拟器发送短信,也可以从设备获取日志。 stackoverflow.com/questions/12479930/…

标签: android android-intent android-emulator sms broadcastreceiver


【解决方案1】:

尝试测试这段代码,我已经根据你的代码实现了一个示例项目代码:

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);

        }
    }

在清单上确保添加权限:

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

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>

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

【讨论】:

  • 还是和以前一样!!!当目标手机收到短信时,在手机中显示强制关闭和关闭程序!!!!!!!!!!!!
  • 示例项目运行良好,请编辑您的问题,添加您的 manifest.xml 文件并删除:SmsReceiver _smsReceiver =new SmsReceiver();来自 Activity。
  • 我将您的示例复制并粘贴到我的程序中!!!!我真的很累!!!!请帮我!!!!!!!!!它还和以前一样,它显示强制关闭!!!!
  • 我怎样才能在程序中收到短信,而不是在收件箱消息android手机中?
  • 查看此链接以防止消息框接收短信:stackoverflow.com/questions/11259729/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2013-05-03
相关资源
最近更新 更多