Lets look at how to send an SMS. It's pretty simple though. A few lines of code and your SMS is gone. To make it more convenient and meaningful, we should also be able to track and let the user know when the SMS is sent and when it is delivered. For a start, I won't be looking into how to trap the error messages here and log or show it to the user. May be, when I get some more time, I will update this post. For now, lets track our SMS.

Intent sentIntent = new Intent(INTENT_ACTION_SENT);
PendingIntent pendingSentIntent = PendingIntent.getBroadcast(this,
REQUEST_CODE_ACTION_SENT, sentIntent,
PendingIntent.FLAG_UPDATE_CURRENT);

Intent deliveryIntent = new Intent(INTENT_ACTION_DELIVERY);
PendingIntent pendingDeliveryIntent = PendingIntent.getBroadcast(this,
REQUEST_CODE_ACTION_DELIVERY, deliveryIntent,
PendingIntent.FLAG_UPDATE_CURRENT);

SmsManager smsManager = SmsManager.getDefault();

// Second parameter is the service center number. Use null if you want
// to use the default number
smsManager.sendTextMessage(number, null, message, pendingSentIntent,
pendingDeliveryIntent);

In the above code snipped, you can see that we are passing 2 pending intents to the SMSManager, one of which will be fired when the SMS is sent, and the other, when the SMS is delivered. It would also let you know the error type if the sending or delivery fails, so that you can take action for the errors. INTENT_ACTION_SENT and INTENT_ACTION_DELIVERY are string constants, which are just some random actions required to setup of the PendingIntents and receive them back.

Setting up the SMSis super easy. How do we track or listen to the updates, which happen through the PendingIntents? Well, those pending intents could be for starting an Activity, a Service or sending out a Broadcast. As you can see, here, I have used a Broadcast, to keep it simple. So, in our activity, we would need to register BroadcastReceivers for the same actions.

IntentFilter filter = new IntentFilter(INTENT_ACTION_SENT);
filter.addAction(INTENT_ACTION_DELIVERY);

registerReceiver(smsSentDeliveredReceiver, filter);

Now, the onReceive() method will be fired, when those events happen, and thus you can notify the user about when the message is sent and delivered.

String action = intent.getAction();
Log.i(TAG, "Received: " + action);

if (action.equals(INTENT_ACTION_SENT)) {
  Log.i(TAG, "Message: Sent");
  Toast.makeText(this, "Message sent", Toast.LENGTH_LONG).show();
} else if (action.equals(INTENT_ACTION_DELIVERY)) {
  Log.i(TAG, "Message: Delivered");
  Toast.makeText(this, "Message delivered", Toast.LENGTH_LONG).show();
}




更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Ajax的get,post请求
  2. 轮播图和懒加载
  3. jQuery常用方法
  4. $.get,$.post,$ajax与Vue基本术语
  5. Vue常用指令及方法
  6. Jquery 与 原生 js的对比
  7. Vue组件及路由
  8. 演示flex的3个属性
  9. js 中使用for或者forEach遍历数组
  10. 仿jd手机端