问题描述
- 自己做了一个接收发送短信的练习,但是一点发送按钮就报错,也接收不了信息。求大神
-
帮帮小弟,良辰必有重谢!!!targetSDK23,minSDK18package com.example.think.smstest;
import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {
private TextView sender, content; private MessageReceiver messageReceiver; private SendStatusReceiver sendStatusReceiver; private IntentFilter intentFilter, sendFilter; private EditText to, msgInput; private Button send; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); sender = (TextView) findViewById(R.id.sender); content = (TextView) findViewById(R.id.content); intentFilter = new IntentFilter(); intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); messageReceiver = new MessageReceiver(); registerReceiver(messageReceiver, intentFilter); to = (EditText) findViewById(R.id.to); msgInput = (EditText) findViewById(R.id.msg_input); sendFilter = new IntentFilter(); sendFilter.addAction("SENT_SMS_ACTION"); sendStatusReceiver = new SendStatusReceiver(); registerReceiver(sendStatusReceiver, sendFilter); send = (Button) findViewById(R.id.send); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SmsManager smsManager = SmsManager.getDefault(); Intent intent = new Intent("SENT_SMS_ACTION"); PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), pendingIntent, null); } }); } class MessageReceiver extends BroadcastReceiver { @TargetApi(Build.VERSION_CODES.M) @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i=0; i<messages.length; i++){ messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i],null); } String address = messages[0].getOriginatingAddress(); String fullMessage = ""; for (SmsMessage message : messages) { fullMessage += message.getMessageBody(); } sender.setText(address); content.setText(fullMessage); } } class SendStatusReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (getResultCode() == RESULT_OK) { Toast.makeText(context, "send succeed", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "send failed", Toast.LENGTH_SHORT).show(); } } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(messageReceiver); unregisterReceiver(sendStatusReceiver); }
}
解决方案
模拟器发送不了短信吧?我记得貌似是,可以用真机测试一下试试。
你那个错误的意思是你收件人地址可能有问题。、
解决方案二:
错误提示是无效的目标地址,也就是说不通,你用的是模拟器吧,模拟器发不了短信的。
解决方案三:
要实验一下是否能实现发送短信的功能,如果你是部署到真机调试的话,可直接输入电话号码和短信内容,便可发送短信,如果是用模拟器的话,可开启2个模拟器,模拟器中的那个5554:AVD中的5554便是它本身的电话号码,启动第二个模拟器的话,它的电话号码将为5556,在输入手机号中输入5556,短信内容可任意写,点击发送,便可在5556那个模拟器接收到5554那个模拟器发来的信息。
解决方案四:
模拟器是不行的,在真机上进行测试然后再看效果
解决方案五:
模拟器也是可以调试发送短信的,不过相对麻烦一些。
按照楼上的方法是可以的。
要实验一下是否能实现发送短信的功能,如果你是部署到真机调试的话,可直接输入电话号码和短信内容,便可发送短信,如果是用模拟器的话,可开启2个模拟器,模拟器中的那个5554:AVD中的5554便是它本身的电话号码,启动第二个模拟器的话,它的电话号码将为5556,在输入手机号中输入5556,短信内容可任意写,点击发送,便可在5556那个模拟器接收到5554那个模拟器发来的信息。
建议还是使用真机进行调试、
解决方案六:
我真机模拟器都试了……~~