短信的接收,短信的发送
2016-05-06 19:16
375 查看
发送短信的几种方式:
第一种:直接发送一个隐式意图,访问android中自带的发送短消息
注解:sendTextMessage方法的几个参数分别是:
1)destinationAddress:目标地址
2)scAddress :相当于哪个移动基站的地址,好像是一直没有启用这个参数,所以一般给Null
3)text :发送的短信内容
//发送短信一般是先发送到运营商的基站,如果基站收到了,会用到了第四个参数
//发送一个延迟广播,来发送状态。
4)sentIntent :发送状态:成功收到我发的信息
//发送短信到运营商的基站,在由基站发送到目标地址,如果目标地址收到了,会用到第五个参数,
//发送一个延迟广播,来发送我收到的状态,但是这个广播会不会发送,一般取决于你运营商会不会发
//模拟器上,这个参数是没有用的;
5)deliveryIntent :接收状态:成功接收到我发的信息
注意:利用代码直接发送短信,有两点问题要注意
1)申请权限 SEND_SMS;
2)利用代码发送短信,短信是不会被系统写入数据表;
解决办法:
要插入的具体数据根据自己的需求来决定:
短信接收:
安卓系统后台有一个服务(Service),专门用来接收短消息,当有新的消息到达时,Service会发送一个广播广播的Action是:”android.provider.Telephony.SMS_RECEIVED”。并且将收到短消息作为广播Intent的 一部分(Intent的Extra)发送出去。
短信接收的一个简单的实例:
注册一个广播:
创建一个广播接收者:
解除注册:
咱们的程序如果想收到短信息:
1)注册广播接收器,接收android.provider.Telephony.SMS_RECEIVED广播
2)必须设定权限 RECEIVE_SMS:
3) 设定较高的优先级 (1000左右)
4)如果不希望系统的短信程序接收短信,就执行abortBroadcast,广播停止下发
问题:如果系统短信接收程序收不到短信了,那么这条短信也不会被写入数据库,自己往数据表中插入就可以了:
Values的值自己来决定:
我也是自己找到的办法,有更好的解决方案。还望多多提提意见!!
第一种:直接发送一个隐式意图,访问android中自带的发送短消息
//1发送一个隐式意图用模拟器发送短消息 Intent intent = new Intent(Intent.ACTION_SENDTO); Uri data = Uri.parse("smsto:"+"手机号码"); intent.setData(data); intent.putExtra("sms_body", "短信内容"); startActivity(intent); //2发送一个隐式意图用模拟器的发送短消息 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setType("vnd.android-dir/mms-sms"); intent.putExtra("address", "手机号码"); intent.putExtra("sms_body", "短信内容"); startActivity(intent);
第二种:用Java代码来实现
Intent intent = new Intent("com.tarena.SENT"); PendingIntent p1 = PendingIntent.getBroadcast(this, 0, intent, 0); Intent intent2 = new Intent("com.tarena.DELIVERY"); PendingIntent p2 = PendingIntent.getBroadcast(this, 0, intent2, 0); SmsManager manager = SmsManager.getDefault(); manager.sendTextMessage( "15555215556", null, etSms.getText().toString(), p1, p2);
注解:sendTextMessage方法的几个参数分别是:
1)destinationAddress:目标地址
2)scAddress :相当于哪个移动基站的地址,好像是一直没有启用这个参数,所以一般给Null
3)text :发送的短信内容
//发送短信一般是先发送到运营商的基站,如果基站收到了,会用到了第四个参数
//发送一个延迟广播,来发送状态。
4)sentIntent :发送状态:成功收到我发的信息
//发送短信到运营商的基站,在由基站发送到目标地址,如果目标地址收到了,会用到第五个参数,
//发送一个延迟广播,来发送我收到的状态,但是这个广播会不会发送,一般取决于你运营商会不会发
//模拟器上,这个参数是没有用的;
5)deliveryIntent :接收状态:成功接收到我发的信息
注意:利用代码直接发送短信,有两点问题要注意
1)申请权限 SEND_SMS;
2)利用代码发送短信,短信是不会被系统写入数据表;
解决办法:
要插入的具体数据根据自己的需求来决定:
ContentValues values = new ContentValues(); values.put("date", date); values.put("body", body); values.put("address", number); values.put("thread_id", thread_id); values.put("person", 0); values.put("type", 2); context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);
短信接收:
安卓系统后台有一个服务(Service),专门用来接收短消息,当有新的消息到达时,Service会发送一个广播广播的Action是:”android.provider.Telephony.SMS_RECEIVED”。并且将收到短消息作为广播Intent的 一部分(Intent的Extra)发送出去。
短信接收的一个简单的实例:
注册一个广播:
protected void onResume() { // TODO Auto-generated method stub super.onResume(); myReciever = new MyReciever(); IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); filter.setPriority(1001); registerReceiver(myReciever, filter); }
创建一个广播接收者:
public class MyReciever extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); ("android.provider.Telephony.SMS_RECEIVED".equals(action)) { Bundle bundle = intent.getExtras(); Object [] pdus = (Object[]) bundle.get("pdus"); StringBuilder builder = new StringBuilder(); String number = ""; //把拼接pdus数组里面的数据 for (int i = 0; i < pdus.length; i++) { SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]); //短信内容 builder.append(message.getDisplayMessageBody()); //电话号码 number = message.getDisplayOriginatingAddress(); } //拦截短信,不让系统接收到, abortBroadcast(); } } }
解除注册:
@Override protected void onPause() { // 解除广播注册 super.onPause(); unregisterReceiver(myReciever); }
咱们的程序如果想收到短信息:
1)注册广播接收器,接收android.provider.Telephony.SMS_RECEIVED广播
2)必须设定权限 RECEIVE_SMS:
3) 设定较高的优先级 (1000左右)
4)如果不希望系统的短信程序接收短信,就执行abortBroadcast,广播停止下发
问题:如果系统短信接收程序收不到短信了,那么这条短信也不会被写入数据库,自己往数据表中插入就可以了:
Values的值自己来决定:
context.getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
我也是自己找到的办法,有更好的解决方案。还望多多提提意见!!
相关文章推荐
- UI控件和代理为什么使用weak
- sql 游标只读一次的原因
- Linux下部署项目
- 用hexo搭建博客
- iOS开发面试高频题,面试不再懵逼
- 第九周项目3-人数不定的工资类
- 给定你一个数n,找出在[a,b]这个区间中和n互质的数的个数。
- 有n根棍子,棍子的长度为ai。想从中选出三个组成周长尽可能唱的三角形。
- surfaceHolder.lockCanvas()返回null
- HDU 1426 Sudoku Killer(数独,划分区域是关键)
- Strict和Quirk模式下的差异
- form表单只提交数据,不跳转,在struts2中的应用
- Java BufferedWriter
- 原来矢量图标可以用字体来设置
- Android之View方法
- 设计模式之组合模式
- expect交互批量添加用户
- 数据库字段拼接的问题
- Spring中装配bean的三种主要方式
- LitePal学习