Android Long SMS
SEND:
ap在发送long sms之前,会调用Framework的SmsManager的divideMessage()函数,将信息进行切分,然后sendMultipartTextMessage()判断是否为long sms,如果是调用sendMultipartText,以long sms的方式发送出去,否则为generic
sms
RECEIVE:
接收到long sms的时候,SMSDispatcher会检查sms是否有header & header.ConcatRef,如果存在,则为long sms的part,交给processMessagePart函数去处理
processMessagePart函数的处理流程:
1.根据long sms的reference_number & address query出和当前part相关的part信息(From raw table)
2.比对信息数量,看是否已经接收到了所有的parts
2.1如果没接收到所有的parts,将当前的part存储到DB
2.2如果接收到所有的parts,取出所有相关parts的相关数据进行拼接,然后从DB中删除所有相关的parts,发送广播
PS:long sms的parts存在DB中的raw表中
假如一条long sms被切分为两条parts,我们的device只接收到其中的一条part,由于generic sms的数据存储在sms表中,raw表中的残余part不会对generic sms造成影响,所有不做任何操作(保不齐哪天那条丢失的part神奇般的又出现了)
分享到:
相关推荐
在Android平台上,发送短信和保存短信记录是两个重要的功能,它们涉及到系统级别的权限以及与SMS相关的API交互。本文将深入探讨这两个主题,并提供相应的代码示例。 ### 1. Android发送短信 在Android中,发送短信...
long time = cursor.getLong(cursor.getColumnIndex(Telephony.Sms.DATE)); String body = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY)); // 打印或处理短信信息 Log.d("SMS", "Address: " + ...
这个名为"sms_onReceive_liu.zip"的压缩包文件包含了一个与Android短信接收相关的Java源代码文件——"sms_onReceive_liu.java"。这个类主要用于监听并处理接收到的短信事件。 首先,我们要理解在Android中如何处理...
This project aims to eventually replace a project I did a LONG time ago called letmeparty....I didn't think it would have many uses beyond people traveling in internet-handicapped places but was ...
在Android中,短信通常存储在SQLite数据库中的"SMS"表内,包括收件箱(INBOX)、发件箱(OUTBOX)、草稿箱(DRAFTS)等类别。每条短信都有其特定的ID、类型、地址、时间戳、内容等字段。 1. **权限设置**: 在...
不过,需要注意的是,由于安全性和隐私政策的考虑,Android在4.4版本之后引入了权限管理,即使应用拥有`READ_SMS`和`WRITE_SMS`权限,也可能无法在第三方应用中删除短信,除非用户将该应用设置为默认的短信应用。...
<uses-permission android:name="android.permission.READ_SMS" /> ``` 然后,我们需要创建一个Activity或者Fragment来执行实际的短信读取操作。这里通常会有一个按钮,点击后触发读取短信的逻辑。我们可以通过...
long timestamp = cursor.getLong(cursor.getColumnIndex(Telephony.Sms.DATE)); String body = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY)); // 处理短信数据... } while (cursor.moveToNext...
<action android:name="android.provider.Telephony.SMS_RECEIVED" /> ``` 在Activity的`onCreate()`方法中注册BroadcastReceiver: ```java SmsReceiver smsReceiver = new SmsReceiver(); registerReceiver...
根据提供的文件信息,我们可以总结出以下关于Android删除短信处理的相关知识点: ### 一、获取待删除短信线程ID 在Android应用中,如果需要删除某条或多条短信,首先需要获取到这些短信所在的线程ID。这是因为...
<uses-permission android:name="android.permission.READ_SMS" /> ``` 接着,通过`ContentResolver`查询短信表: ```java Uri smsURI = Uri.parse("content://sms/inbox"); // 获取收件箱中的短信 ...
long timestamp = cursor.getLong(cursor.getColumnIndex("date")); // 处理其他字段... } ``` 接下来,我们需要将获取到的短信数据序列化到本地,以便备份。序列化是一种将对象转换为字节流的过程,以便能够存储...
<uses-permission android:name="android.permission.READ_SMS" /> ``` 2. 在运行时请求权限: ```java if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION...
<uses-permission android:name="android.permission.READ_SMS" /> ``` 如果需要写入短信,还需要: ```xml <uses-permission android:name="android.permission.WRITE_SMS" /> ``` 2. 查询短信: 短信存储在`...
long timestamp = cursor.getLong(cursor.getColumnIndex(Telephony.Sms.DATE)); // 处理每条短信的信息... } ``` 四、监听新短信 如果需要实时获取新收到的短信,可以注册一个BroadcastReceiver来监听`android....
综上所述,Android编程中读取SMS短信并保存到SQLite数据库的过程主要包括:获取短信内容提供者的Uri、查询短信数据、创建SQLite数据库、插入短信到数据库以及从数据库中查询并显示短信。这个过程展示了Android对...
<uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> ``` 接下来,我们需要访问短信数据库。Android系统提供了ContentResolver和...
在Android中,短信数据存储在SQLite数据库中,主要涉及到两个表:`sms` 和 `thread`。`sms` 表存储单条短信信息,包括短信内容、发送者/接收者、时间等信息;`thread` 表则记录了短信会话,它通过`thread_id`字段...
Toast.makeText(context, "没有安装可响应的应用", Toast.LENGTH_LONG).show(); } } ``` #### 解析代码 1. **构造URI**:通过`Uri.parse("smsto:" + receiverNumber)`构建一个包含接收者电话号码的URI。 2. **...