Android 收到短信时强制关闭对话框
我写了一个程序,用Android发送和接收短信。发送短信成功,但当目标手机收到短信时,会显示强制关闭对话框。单击后,将打开收到的SMS 我想收到的短信显示在一个文本视图,我把一个页面 SmsReceiver.javaAndroid 收到短信时强制关闭对话框,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
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>