标签: pdu

创建适用于Android的PDU,与SmsMessage.createFromPdu()(GSM 3gpp)配合使用

目标:(注意:所选答案为CDMA(3gpp2)生成GSM(3gpp)PDU )请参考此处

创建可以传入的PDU SmsMessage.createFromPdu(byte[] pdu).我正在向我的BroadcastReciever一个听广播短信的"广播意图" .

BroadcastReciever

使用android.provider.Telephony.SMS_RECEIVED"真正的"短信的

intent-filter为这些新的"应用程序SMS"使用自定义操作.

@Override
public void onReceive(Context context, Intent intent) {

    Bundle bundle = intent.getExtras();

    if (bundle != null) {
        Object[] pdusObj = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdusObj.length];

        // getting SMS information from Pdu.
        for (int i = 0; i < pdusObj.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
        }

        for (SmsMessage currentMessage : messages) {
            //the currentMessage.getDisplayOriginatingAddress() 
            //or …
Run Code Online (Sandbox Code Playgroud)

java android pdu

12
推荐指数
1
解决办法
2万
查看次数

"deliveryIntent"如何在Android SMS框架中运行?

SMSManagers的Android文档sendTextMessage函数

public void sendTextMessage (String destinationAddress, String scAddress, String text,         
PendingIntent sentIntent, PendingIntent deliveryIntent)
Run Code Online (Sandbox Code Playgroud)

deliveryIntent 如果不为NULL,则在将邮件传递给收件人时广播此PendingIntent.状态报告的原始pdu位于扩展数据("pdu")中

我无法理解当SMS传递到destinationAddress或scAddress时是否会触发deliveryIntent,"状态报告的原始pdu是否在扩展数据("pdu")中是什么意思"以及如何获取该报告?.

我感谢您的努力.

sms android pdu android-intent

8
推荐指数
1
解决办法
2361
查看次数

当我对SMS PDU(GSM 7位)用户数据进行编码/解码时,是否需要先添加UDH?

虽然我可以成功地进行编码和解码的SMS消息的用户数据部分时,UDH是存在,我无法这样做时,UDH 存在(在这种情况下,连锁信息).

当我解码或编码用户数据时,我是否需要在执行此操作之前将UDH添加到文本中?

本文提供了一个编码例程示例,它使用填充位补偿UDH(我仍然不完全理解),但它没有给出传递给例程的数据的示例,因此我没有明确的用例(我在网站上找不到解码样本):http: //mobiletidings.com/2009/07/06/how-to-pack-gsm7-into-septets/.

到目前为止,如果我在解码之前将UDH添加到用户数据中,我已经能够得到一些结果,但我怀疑这只是一个巧合.

作为示例(使用来自https://en.wikipedia.org/wiki/Concatenated_SMS的值):

UDH := '050003000302';
ENCODED_USER_DATA_PART := 'D06536FB0DBABFE56C32'; // with padding, evidently
DecodedUserData := Decode7Bit(UDH + ENCODED_USER_DATA_PART);
Writeln(DecodedUserData);
Run Code Online (Sandbox Code Playgroud)

输出:"ß@ø¿Æ@ hello world"

EncodedUserData := Encode7Bit(DecodedUserData);
DecodedUserData := Decode7Bit(EncodedEncodedUserData);
Writeln(DecodedUserData);
Run Code Online (Sandbox Code Playgroud)

相同的输出:"ß@ø¿Æ@ hello world"

没有预先设置UDH,我得到了垃圾:

DecodedUserData := Decode7Bit(ENCODED_USER_DATA_PART);
Writeln(DecodedUserData);
Run Code Online (Sandbox Code Playgroud)

输出:"PKYY§An§eYI"

处理这个问题的正确方法是什么?

在编码用户数据时,我是否应该在文本中包含UDH?

我是否应该在解码后剥离垃圾字符,或者我(我怀疑)完全脱离这个假设?

虽然这里的解码算法似乎没有UDH,但它似乎没有考虑任何UDH信息: 寻找GSM 7bit编码/解码算法.

如果有人能按照正确的方式指导我,我将永远感激不尽.非常感谢任何明确的示例/代码示例.;-)

我还将提供一个包含算法的小样本应用程序,如果有人认为它将有助于解决这个谜题.

编辑1:

我正在使用Delphi XE2 Update 4 Hotfix 1

编辑2:

感谢@whosrdaddy的帮助,我能够成功地使我的编码/解码程序正常工作.

作为旁注,我很好奇为什么当UDH没有用它编码时,用户数据需要在7位边界上,但@whosrdaddy引用的ETSI规范段落中的最后一句回答了:

如果使用7位数据且TP-UD-Header未在septet边界上完成,则在最后一个信息元素数据八位字节之后插入填充位,以便整个TP-UD头部具有整数个septets.这是为了确保SM本身在八位字节边界上开始,以便早期阶段移动设备能够显示SM本身,尽管可能无法理解TP-UD字段中的TP-UD标头

我的代码部分基于以下资源的示例:

寻找GSM 7bit编码/解码算法

https://en.wikipedia.org/wiki/Concatenated_SMS

http://mobiletidings.com/2009/02/18/combining-sms-messages/

http://mobiletidings.com/2009/07/06/how-to-pack-gsm7-into-septets/

http://mobileforensics.files.wordpress.com/2007/06/understanding_sms.pdf

http://www.dreamfabric.com/sms/ …

delphi sms gsm concatenation pdu

8
推荐指数
1
解决办法
1万
查看次数

Android中的短信原始pdu

1)有什么方法可以从Android设备发送原始SMS PDU吗?

要么,

2)是否有任何可用的类可以让我访问PDU头(例如TP-DCS),以便我可以按照自己的意愿构建PDU?

我在网上搜索了一下,发现:http: //www.androidjavadoc.com/1.0_r1_src/com/android/internal/telephony/gsm/ISms.html 但上面的类是私有的,因此我无法使用(避风港)实际上理解为什么.

我能以任何方式提出要求吗?如果没有那么为什么我不能拥有那种功能呢?

感谢名单

java mobile sms android pdu

7
推荐指数
1
解决办法
9627
查看次数

+ CMS错误:304,使用at命令发送消息

我是GSM和AT命令集的新手,

根据错误+ CMS ERROR:304,根据activexperts,它是一个无效的PDU模式参数

我试图在PDU模式下使用AT命令向GSM调制解调器发送消息

AT+CMGF=0
OK

AT+CMGS=31
> 079136190700203911000C913639350768260000AA13C834A89D07B9C3ED32283D0751C3F3F41B

+CMS ERROR: 304        
Run Code Online (Sandbox Code Playgroud)

你能帮助我们,我错过了什么或错了什么? 我用它来编码PDU

多谢你们.

sms modem gsm pdu at-command

7
推荐指数
1
解决办法
2万
查看次数

如何在Android中获取短信收件人的电话号码

我已经看到很多问题,询问如何获取短信发送者的电话号码,而不是收件人的电话号码.我已使用此站点上的工具生成PDU,并可在其中查看收件人的电话号码:

有用的PDU细节和PDU转换工具

但是,我没有看到Android提供的SmsMessage类中的任何地方,我可以获取收件人的电话号码.我想这样做的原因是我有一部双卡手机,但在Android中没有任何地方可以看到我可以确定用于传入短信的SIM端口.至少,我想查看每条短信,并确定发送给他们的电话号码.

这个问题看起来与我的非常相似但没有答案:

如何在Android中获取短信收件人的电话号码

我的问题不同,因为我已经详细说明了一个关于PDU的站点的链接,这可能对从SmsMessage类提供的原始PDU字节中提取电话号码很有用.

有任何想法吗?

sms android pdu

5
推荐指数
1
解决办法
1421
查看次数

SMS PDU 格式 - 如何提取消息部分

如何从 SMS PDU 中提取消息?

我需要从 SMS PDU 获取消息。当我使用一些在线服务时,它们运行良好。例如,这里 - http://www.diafaan.com/sms-tutorials/gsm-modem-tutorial/online-sms-pdu-decoder/ - 来自 PDU 的消息0791448720003023240DD0E474D81C0EBB010000111011315214000BE474D81C0EBB5DE3771Bdiafaan.com

我发现了一些 SMS PDU Java 实现来进行PDU->Text转换,但它们似乎没有按我的预期工作,因为我没有从整个 PDU 中提取消息部分(换句话说,我没有剪切服务信息 - From,SMSC. ..) - 那么我怎样才能在 Java 上做到这一点呢?或者只是一个算法也会有很大的帮助。谢谢!

java sms gsm pdu

5
推荐指数
1
解决办法
3049
查看次数

单元测试Android SMS接收器

我尝试在BroadcastReceiver上编写一个单元测试,当收到短信时会收到通知.它不应该是默认的应用程序.相反,我只需要这个双因素身份验证.对于这种情况,我用[1]创建了一个PDU.

但是当我把它传递给BroadcastReceiver时,发送者的手机nr永远不会被android读取它只是null.正文文本被返回.

@TargetApi(Build.VERSION_CODES.KITKAT)
@Test
public void testOnReceive() throws Exception {
    final byte[] decodedPDU = BaseEncoding.base16().decode(PDU);
    final ReceiveSmsBroadcastReceiver receiveSmsBroadcastReceiver = spy(new ReceiveSmsBroadcastReceiver(true));
    final Intent intent = new Intent();
    intent.putExtra("format",SmsConstants.FORMAT_3GPP);
    intent.putExtra("pdus", new Object[]{decodedPDU});
    intent.setAction("android.provider.Telephony.SMS_RECEIVED");
    intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 1);
    receiveSmsBroadcastReceiver.onReceive(InstrumentationRegistry.getTargetContext(), intent);
Run Code Online (Sandbox Code Playgroud)

在接收器中,我这样做以获取SMSMessage对象:

@TargetApi(Build.VERSION_CODES.KITKAT)
private void getSMSKitKat(final Context context, final Intent intent) {
    final SmsMessage[] messagesFromIntent = Telephony.Sms.Intents.getMessagesFromIntent(intent);
Run Code Online (Sandbox Code Playgroud)

我在这里收到一个SmsMessage数组,正文消息是正确的.但我需要测试我的支票发件人电话号码才能通知用户界面收到短信:但是这里的nr总是为空:

private boolean isCorrectSender(@Nullable final SmsMessage message) {
    if (message == null) {
        return false;
    }
    final String nr = message.getOriginatingAddress();
Run Code Online (Sandbox Code Playgroud)

有人能指出我这里有什么不对吗?

PS:SMSConstants和PhoneConstants都是我从AOSP获取的框架类,因为这些API是非公开的

[1] http://twit88.com/home/utility/sms-pdu-encode-decode

sms junit android unit-testing pdu

5
推荐指数
0
解决办法
553
查看次数

如何在GSMComm库中连接长短信?

这是我的代码:

根据这个页面,CreateConcatTextMessage方法返回一个类型的数组,SmsSubmitPdu[]但是,当我尝试发送它时,SendMessages我得到一个MessageServiceError 500.我错过了什么?

       SmsSubmitPdu[] pdu2;

        try{
            pdu2 = SmartMessageFactory.CreateConcatTextMessage("My name is Barry Allen. And I am the fastest man alive. When I was a child I saw my mother killed by something impossible. My father went to prison for her murder.", "+639234597676");
            comm.SendMessages(pdu2);
        }

        catch (MessageServiceErrorException e500){
            MessageBox.Show(e500.ToString(), "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        catch (CommException e501){
            MessageBox.Show(e501.ToString(), "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
Run Code Online (Sandbox Code Playgroud)

c# sms gsm pdu gsmcomm

5
推荐指数
2
解决办法
1304
查看次数

在Android中编码SMS消息

我的问题是我想发送某个类的SMS消息并使用某种编码.(0和7位编码).

在检查Android.Telephony.SmsManager和SmsMessage时,没有那么多你可以做的.SmsManager提供了两个函数SendTextMessage和SendDataMessage.如果您只是想向某人发送正常的短信,第一个工作正常.所以我想SendDataMessage是我以某种方式需要使用的函数.但是我无法弄清楚如何使用它.并且似乎没有任何人在使用此功能的网络上(我能找到).

有谁知道任何可以帮助我的事情?:-)要么如何发送Class0 7位编码短信,要么如何正确使用SendDataMessage功能.

sms android character-encoding pdu

3
推荐指数
1
解决办法
4273
查看次数