MessageStatuscitrix receiverr, sms delivered, uri: conten

android sms发送、接收及格式 - yidianfengfan - ITeye技术网站
博客分类:
一、 android sms所要的权限
&uses-permission android:name="android.permission.READ_SMS" /&
&uses-permission android:name="android.permission.RECEIVE_SMS" /&
二、 sms发送
与短消息发送相关的类为:SmsManager.
SmsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
参数说明:
destinationAddress the address to send the message to
scAddress is the service center address or null to use the current default SMSC
text the body of the message to send
sentIntent if not NULL this PendingIntent is broadcast when the message is sucessfully sent, or failed. The result code will be Activity.RESULT_OK for success, or one of these errors: RESULT_ERROR_GENERIC_FAILURE RESULT_ERROR_RADIO_OFF RESULT_ERROR_NULL_PDU. The per-application based SMS control checks sentIntent. If sentIntent is NULL the caller will be checked against all unknown applications, which cause smaller number of SMS to be sent in checking period.
deliveryIntent if not NULL this PendingIntent is broadcast when the message is delivered to the recipient. The raw pdu of the status report is in the extended data ("pdu").
其中两个PendingIntent模式为:
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);
PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);
&&&&&&& 并注册接收器,根据getResultCode()来判断:
registerReceiver(sendReceiver);
registerReceiver(deliveredReceiver);
三、 sms接收
根据接收时广播的android.provider.Telephony.SMS_RECEIVED的Intent.我们可以扩展一个BroadcastReceiver来接收sms.
传递的Intent包含pdus数据。相关代码如下:
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i = 0; i & pdus. i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
四、 采用ContentObserver监控短信数据库
上面方法三中并不能对sms进行更新和删除操作,要做这些操作需要用ContentObserver来监控短信数据库的变化来进行相关操作。
1. 短信数据库的ContentUri
&& public final static String SMS_URI_ALL =
"content://sms/"; //0
public final static String SMS_URI_INBOX = "content://sms/inbox";//1
public final static String SMS_URI_SEND = "content://sms/sent";//2
public final static String SMS_URI_DRAFT = "content://sms/draft";//3
public final static String SMS_URI_OUTBOX = "content://sms/outbox";//4
public final static String SMS_URI_FAILED = "content://sms/failed";//5
public final static String SMS_URI_QUEUED = "content://sms/queued";//6
2. sms主要结构:
_id =& 短消息序号 如100
thread_id =& 对话的序号 如100
address =& 发件人地址,手机号.如+0
person =& 发件人,返回一个数字就是联系人列表里的序号,陌生人为null
date =& 日期
long型。如2
protocol =& 协议 0 SMS_RPOTO, 1 MMS_PROTO
read =& 是否阅读 0未读, 1已读
status =& 状态 -1接收,0 complete, 64 pending, 128 failed
type =& 类型 1是接收到的,2是已发出
body =& 短消息内容
service_center =& 短信服务中心号码编号。如+0
3. 步骤
a. 写一个类继承ContentObserver
public class SMSDBObserver extends ContentObserver
&&&&&&&&&&& 重写onChange方法(里面对INBOX, SEND两个URI进行处理)
&&&&&&&&&&& public void onChange(boolean selfChange)
Uri smsInBox = Uri.parse(SMS_URI_INBOX);
Cursor c = ctx.getContentResolver().query(uriSms, null, selection, selectionArgs, sortOrder);
//对字段进行操作。。。
//ctx.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
//ctx.getContentResolver().update(uri, values, where, selectionArgs);
//ctx.getContentResolver().delete(url, where, selectionArgs);
//ctx.getContentResolver().insert(url, values);
b. 在Activity中注册短信监控
&&&&&&
// 监控短信
smsObserver = new SMSDBObserver(new Handler(), this, app);
getContentResolver().registerContentObserver(Uri.parse(SMSDBObserver.SMS_URI_ALL), true, smsObserver);
注:
想监控已发送的,就要监控content://sms/send.
想删除时contentUri只能是content://sms/或content://sms/ conversations
yidianfengfan
浏览: 63291 次
来自: 北京
也遇到了类似的问题,感谢;不过解决方法看得不是很明白
你好,请问一下,如果接口参数是一个类,那么如何传递?publi ...
很好。能不能说说你怎么分析出的,或者结合源代码讲讲,或者透露下 ...
不错 学习了51CTO视频课程推荐:
2109人学习
查看:2658|回复:2
助理工程师
需要用ContentObserver来监控短信数据库的变化来进行相关操作。
  1. 短信数据库的ContentUri
  Java代码
  public final static String SMS_URI_ALL = &content://sms/&; //0
  public final static String SMS_URI_INBOX = &content://sms/inbox&;//1
  public final static String SMS_URI_SEND = &content://sms/sent&;//2
  public final static String SMS_URI_DRAFT = &content://sms/draft&;//3
  public final static String SMS_URI_OUTBOX = &content://sms/outbox&;//4
  public final static String SMS_URI_FAILED = &content://sms/failed&;//5
  public final static String SMS_URI_QUEUED = &content://sms/queued&;//6
 2. sms主要结构:
  Java代码
  _id =& 短消息序号 如100
  thread_id =& 对话的序号 如100
  address =& 发件人地址,手机号.如+0
  person =& 发件人,返回一个数字就是联系人列表里的序号,陌生人为null
  date =& 日期 long型。如2
  protocol =& 协议 0 SMS_RPOTO, 1 MMS_PROTO
  read =& 是否阅读 0未读, 1已读
  status =& 状态 -1接收,0 complete, 64 pending, 128 failed
  type =& 类型 1是接收到的,2是已发出
  body =& 短消息内容
  service_center =& 短信服务中心号码编号。如+0
  a. 写一个类继承ContentObserver
  Java代码
  public class SMSDBObserver extends ContentObserver
  public class SMSDBObserver extends ContentObserver
  重写onChange方法(里面对INBOX, SEND两个URI进行处理)
  Java代码
  public void onChange(boolean selfChange)
ri smsInBox = Uri.parse(SMS_URI_INBOX);
  Cursor c = ctx.getContentResolver().query(uriSms, null, selection, selectionArgs, sortOrder);
  //对字段进行操作。。。
  //ctx.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
  //ctx.getContentResolver().update(uri, values, where, selectionArgs);
  //ctx.getContentResolver().delete(url, where, selectionArgs);
  //ctx.getContentResolver().insert(url, values);
  public void onChange(boolean selfChange)
  Uri smsInBox = Uri.parse(SMS_URI_INBOX);
  Cursor c = ctx.getContentResolver().query(uriSms, null, selection, selectionArgs, sortOrder);
b. 在Activity中注册短信监控
  Java代码
  // 监控短信
  smsObserver = new SMSDBObserver(new Handler(), this, app);
  getContentResolver().registerContentObserver(Uri.parse(SMSDBObserver.SMS_URI_ALL), true, smsObserver);
  // 监控短信
  smsObserver = new SMSDBObserver(new Handler(), this, app);
  getContentResolver().registerContentObserver(Uri.parse(SMSDBObserver.SMS_URI_ALL), true, smsObserver);
  想监控已发送的,就要监控content://sms/send.
  想删除时contentUri只能是content://sms/或content://sms/ conversations
助理工程师
这样监听的话是不是说只要这个数据库的数据发生改变,我这里就自动相应onchange里面的代码
用这种方法实现listview的刷新可以不
为什么我debug的时候却监听不到数据库的变化,不去执行onchange里面的方法
初级工程师

我要回帖

更多关于 citrix receiver 的文章

 

随机推荐