android实现发送短信并保存到数据库,同时可以获得发送报告和接收报告

  1. SmsManager smsMagager = SmsManager.getDefault();  
  2.   
  3.   
  4.         // create the sentIntent parameter     
  5.         Intent sentIntent = new Intent(SENT_SMS_ACTION);    
  6.   
  7.         PendingIntent sentPI = PendingIntent.getBroadcast(this0, sentIntent,    
  8.                 0);    
  9.   
  10.         // create the deilverIntent parameter     
  11.         Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);    
  12.   
  13.         PendingIntent deliverPI = PendingIntent.getBroadcast(this0,    
  14.                 deliverIntent, 0);    
  15.           
  16.         String tel = editTel.getText().toString();  
  17.         String msg = editMsg.getText().toString();  
  18.   
  19.         smsMagager.sendTextMessage( tel , null , msg , sentPI , deliverPI );  

先上代码,上述功能实现了Android发送短信到指定号码的功能(sentPI为了获得发送报告的,DeliverPI为了获得对方接受到之后返回的报告的),区别就是:发送报告,只是短信发送出去,对面是否接受不关心;接收报告:就是发送方的短信发送到对方手机上之后,对方手机会返回给运营商一个信号,告知运营商收到短信,运营商再把这个信号发给发送方,发送方得到这个信号之后,

同时需要给这个应用权限



<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />


若想把刚刚发送的短信插入到数据库中,需要增加以下内容


  1.         ContentValues values = new ContentValues();  
  2.              //发送时间  
  3.  <span> </span>           values.put("date", System.currentTimeMillis());   
  4.              //阅读状态              
  5.             values.put("read"0);             
  6.              //1为收 2为发             
  7.            values.put("type"2);           
  8.              //送达号码              
  9.            values.put("address",tel);             
  10.              //送达内容            
  11.            values.put("body", msg);             
  12.              //插入短信库    
  13.           
  14.            getContentResolver().insert(Uri.parse("content://sms/sent"), values);  

同时需要增加以下权限

<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />

开始我担心,只插入到一个表里会不会有问题,后来参看了TelephonyProvider发现我的想法是多余的,因为TelephonyProvider会把数据插入到每个表中。

注册两个广播~得到发送报告和接收报告~

  1. @Override  
  2. protected void onResume() {  
  3.     // TODO Auto-generated method stub  
  4.     super.onResume();  
  5.     registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));  
  6.     registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));  
  7. }     

一个是发送短信的,一个是接受短信的,
  1. BroadcastReceiver sendMessage = new BroadcastReceiver() {  
  2.   
  3.     @Override  
  4.     public void onReceive(Context c, Intent intent) {  
  5.         // TODO Auto-generated method stub  
  6.         //判断短信是否发送成功     
  7.         switch (getResultCode()) {    
  8.         case Activity.RESULT_OK:    
  9.             Toast.makeText(c, "短信发送成功", Toast.LENGTH_SHORT).show();    
  10.             break;    
  11.         default:    
  12.             Toast.makeText(c, "发送失败", Toast.LENGTH_LONG).show();    
  13.             break;    
  14.         }    
  15.     }  
  16. };  
  17.       
  18.     BroadcastReceiver receiver = new BroadcastReceiver() {    
  19.   
  20.         @Override    
  21.         public void onReceive(Context context, Intent intent) {    
  22.             //表示对方成功收到短信     
  23.             Toast.makeText(context, "对方接收成功",Toast.LENGTH_LONG).show();    
  24.         }    
  25.     };   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值