1、发送短信涉及到权限,我们需要把权限加上
2、当我们发送短信时,不管发送是否成功,接收方是否接收到,系统都会发送广播
3、这时我们注册广播去接收一下就可以了
4、布局文件很简单,里面就两个EditText和一个button
下面上代码,里面有注释:
发送广播接收器:
package com.example.fanlei.cutnotedemo;import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsManager; import android.widget.Toast;/*** 监听短信是否已经发送成功*/ public class MySmsSendReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("SMS_SEND")){switch(getResultCode()){case Activity.RESULT_OK:Toast.makeText(context,"发送成功",Toast.LENGTH_SHORT).show();break;case SmsManager.RESULT_ERROR_GENERIC_FAILURE:Toast.makeText(context,"发送失败",Toast.LENGTH_SHORT).show();break;case SmsManager.RESULT_ERROR_NO_SERVICE:break;case SmsManager.RESULT_ERROR_NULL_PDU:break;case SmsManager.RESULT_ERROR_RADIO_OFF:break;}}} }
接收方的广播
package com.example.fanlei.cutnotedemo;import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast;/*** 监听对方是否发已经接收到短信*/ public class MySmsDeliverReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("SMS_DELIVER")){switch(getResultCode()){case Activity.RESULT_OK:Toast.makeText(context,"对方已接收",Toast.LENGTH_SHORT).show();break;case Activity.RESULT_CANCELED:break;}}} }
主函数
package com.example.fanlei.cutnotedemo;import android.app.PendingIntent; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.telephony.SmsManager; import android.view.View; import android.widget.EditText; import android.widget.Toast;import java.util.List;public class MainActivity extends ActionBarActivity {private EditText editText1,editText2;private MySmsSendReceiver mySmsSendReceiver; //发送短信的广播private MySmsDeliverReceiver mySmsDeliverReceiver;//对方是否已经接收的广播 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mySmsSendReceiver = new MySmsSendReceiver();mySmsDeliverReceiver = new MySmsDeliverReceiver();editText1 = (EditText) findViewById(R.id.editText1);//手机号editText2 = (EditText) findViewById(R.id.editText2);//内容//初始化启动意图Intent sendIntent = new Intent();sendIntent.setAction("SMS_SEND");Intent deliverIntent = new Intent();deliverIntent.setAction("SMS_DELIVER");//满足条件后执行Intentfinal PendingIntent send = PendingIntent.getBroadcast(MainActivity.this,0 ,sendIntent,0);final PendingIntent deliver = PendingIntent.getBroadcast(MainActivity.this,0,deliverIntent,0);//发送短信按钮findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String phoneNumber = editText1.getText().toString();String content = editText2.getText().toString();if (phoneNumber.equals("")){Toast.makeText(MainActivity.this,"手机号码为空",Toast.LENGTH_SHORT).show();}else {//获得短信的管理者SmsManager sm = SmsManager.getDefault();//短信字数限制,如果>70,则需要拆分短信发送if (content.length() > 70){List<String> contents = sm.divideMessage(content);for (String sms : contents){sm.sendTextMessage(phoneNumber,null,sms,send,deliver);//发送短信 }}else {sm.sendTextMessage(phoneNumber,null,content,send,deliver);//发送短信 }}}});//注册广播registerReceiver(mySmsSendReceiver,new IntentFilter("SMS_SEND"));registerReceiver(mySmsDeliverReceiver,new IntentFilter("SMS_DELIVER"));} }
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context=".MainActivity"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/editText1"android:hint="手机号"android:inputType="phone"/><EditTextandroid:id="@+id/editText2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/editText1"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:hint="内容"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/button"android:layout_centerVertical="true"android:layout_centerHorizontal="true"android:text="发送短信" /></RelativeLayout>
小伙伴们可以用10086进行测试