Android应用发送短信的实现
来源:互联网 发布:淘宝规则在哪里查看 编辑:程序博客网 时间:2024/05/20 02:56
实现Android应用的发送消息
实现两个安卓机之间发送短消息:
新建一个Android项目:
在MainActivity中添加一个EditText,id=et_content,用来输入想要发送的短信内容
然后添加一个Button按钮,it=btn_send,点击后发送短消息
然后在MainActivity.java中添加如下代码:
EditText etContent; //声明输入框 Button btnSend; //声明发送按钮 private MyReciver receiver;//声明一个广播接收器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etContent=(EditText) findViewById(R.id.et_content); btnSend=(Button) findViewById(R.id.bt_send); //在发送按钮上添加一个监听器,点击发送后会执行onClick方法 btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //在onClick方法中执行SendSms()方法 sendSMS(); } }); } protected void sendSMS() {//通过隐式发送intent实现---------------- //启动系统自带的action:ACTION_SENDTO Intent intent = new Intent(Intent.ACTION_SENDTO); //发送给号码为15555215554的设备 Uri data = Uri.parse("smsto:"+15555215554); intent.setData(data); //"sms_body"是指系统数据表sms中的body字段,存放的是短信内容 intent.putExtra("sms_body", etContent.getText().toString()); startActivity(intent);//另外一种通过发送隐式intent的方式来实现------------------------ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setType("vnd.android-dir/mms-sms"); //address为数据表中存放电话号码的字段 intent.putExtra("address", "15555215554"); intent.putExtra("sms_body", etContent.getText().toString()); startActivity(intent); //以上两种方法,除了电话号码外其他都为固定用法,记住就好//利用代码发送短信, 但是短信不会被写入系统数据表--------------------------//利用代码发送短信,首先要在AndroidMainFest.xml添加接收和发送权限<uses-permission android:name="android.permission.SEND_SMS"/><uses-permission android:name="android.permission.RECEIVE_SMS"/> //构建一个SMSManager,用来发送短信 SmsManager manager = SmsManager.getDefault(); //自定一两个intent,发送两个隐式意图,这两个隐式意图自己定义 Intent intent1 = new Intent("com.example.SENT");; Intent intent2 = new Intent("com.example.DELIVERY"); //延迟意图 sendTextMessage()方法后边两个参数pi1和pi2 为pendingIntent 延迟意图这两个延迟意图用来查看短信是否 发出和接收pi1在发送者发送信息送达基站时,会调用,标志着短信 已经发出pi2是从基站送达接收者手机时会被调用,标志着短信已 经由接收者接收,因为发送出去的信息不一定会被接收到,所以pi2 不一定会被调用,这里的pi1和pi2通过广播的方式,通知短信发送的 相关信息 PendingIntent pi1 = PendingIntent.getBroadcast(this, 0, intent1 , 0);//延迟意图 PendingIntent pi2 = PendingIntent.getBroadcast(this, 0, intent2 , 0); //发送短信 manager.sendTextMessage("15555215556", null, etContent.getText().toString(), pi1, pi2); } //onREsume()方法是Activity运行过程中与用户交互时执行的方 法,一般可以再次方法中注册broadcastReceiver @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); //创建一个自定义的receiver receiver = new MyReciver(); //创建意图过滤器,并把刚才定义的Action添加上,表示只接收 这些action发送的广播 IntentFilter filter = new IntentFilter(); filter.addAction("com.example.SENT"); filter.addAction("com.example.DELIVERY"); //安卓系统后台有一个服务(Service),专门用来接收短消 息。当有新的消息达到时,它会发送一个广播,广播的 Action是“android.provider.Telephony.SMS_RECEIV ED”并且将收到短消息作为广播Intent的一部分(Intent 的Extra)发送出去。权限高的先得到 filter.addAction("android.provider.Telephony. SMS_RECEIVED"); //在这里给filter添加一个最高权限; filter.setPriority(Integer.MAX_VALUE); //注册receiver registerReceiver(receiver, filter); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); //注销注册 unregisterReceiver(receiver); } //既然发送了广播就要有一个广播接收者,自定义一个广播接收者,自定 义一个类MyReceiver继承BroadcastReceiver public class MyReciver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //既然发送了广播就要有一个广播接收者,自定义一个广 播接收者 if("com.example.SENT".equals(action)){ Log.d("TAG", "短信发送成功"+System.currentTimeMillis()); } //如果intent的action是com.example.SENT,表示pi1 被调用,即短信已经送达基站 else if("com.example.DELIVERY".equals(action)){ Log.i("TAG", "对方已经收到短信"+System.currentTimeMillis()); } //如果intent的action是android.provider.Telephony.SMS_R ECEIVED,这时我们就可以开始处理短信内容了 if("android.provider.Telephony.SMS_RECEIVED".equals(action)){ //处理消息,StringBuilder 对象用来存放短信信息 //String number 用来存放电话号码 Bundle bundle = intent.getExtras(); Object[] pdus = (Object[]) bundle.get("pdus"); StringBuilder sb = new StringBuilder(); String number = ""; //把一个一个的pdus转换为一段段的短消息 for(int i=0;i<pdus.length;i++){ SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]); //然后把正文拼接起来 sb.append(message.getDisplayMessageBody()); //获取电话号码 number = message.getDisplayOriginatingAddress(); } Log.d("TAG", "发送方电话"+number+"内容为"+sb); } } }
0 0
- Android应用发送短信的实现
- android应用-短信发送
- Android实现发送短信
- Android实现发送短信
- Android 短信发送器的实现
- Android - 批量发送短信的实现方式
- Android 短信发送器的实现
- android实现发送短信的功能
- Android短信发送器的实现
- android-短信发送器的实现
- android后台发送短信的实现
- Android实现发送短信的功能
- 【Android】短信应用——短信发送
- android 应用中短信发送
- Android发送短信,并监听短信发送后是否发送成功的实现方法
- android的短信发送
- android实现发送短信demo
- android 定时发送短信实现
- ZooKeeper分布式过程协同技术详解
- Oracle查询死锁及处理方法
- C++ Primer 学习笔记_96_用以大型程序的工具 -多重继承与虚继承[续1]
- C++ Primer 学习笔记_97_用来大型程序的工具 -多重继承与虚继承[续2]
- 230. Kth Smallest Element in a BST
- Android应用发送短信的实现
- 八大排序算法 之 归并排序
- 如果让我设计拉勾移动端 App
- codeforces 670B Game of Robots
- js--函数--3.函数属性和方法
- hadoop的回收站功能
- c++中的const总结
- Leetcode哈希表类题目
- 字符串处理函数(续)