我想创建一个应用程序,当短信到达并处理该短信时得到通知,但阅读createFromPdu函数的参考,它指出:
这种方法很快就会被弃用,所有通过处理SMS_RECEIVED_ACTION broadcast intent来处理传入SMS消息的应用程序现在都必须将intent中额外的新格式字符串传递到新方法createFromPdu(字节[],字符串),该方法采用额外的格式参数。这是在需要同时支持3GPP和3GPP2格式的设备上正确解码PDU所必需的,例如双模GSM/CDMA和CDMA/LTE手机。
但是,文档和SDK中都缺少createFromPdu(字节[],字符串)
函数。
我该怎么办?我需要支持这些双卡双模式手机。
你没有提到你的目标是哪个Android版本,但考虑到问题的日期,我假设果冻豆4。十、
在写这篇文章的时候,我们在LollipopMR1,关于使用createFromPdu和格式参数的弃用说明仍然有效:
https://android.googlesource.com/platform/frameworks/opt/telephony//android-5.1.0_r3/src/java/android/telephony/SmsMessage。JAVA
但是,您可以使用电话提供程序APIgetMessagesFromIntent
:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.2_r1/android/provider/Telephony.java/#686而不是直接使用该API
该方法考虑了PDU格式(以及多SIM设备的Lollipop中的订阅ID),并为您提供了一系列SmsMessage实例。
在谷歌的彩信应用程序中可以看到它的使用示例:
https://android.googlesource.com/platform/packages/apps/Mms//master/src/com/android/mms/transacthtml" target="_blank">ion/SmsReceiverService。java(请参见handlesmserved
)
public void onReceive(Context context, Intent intent) {
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(intent);
String format = intent.getStringExtra("format");
SmsMessage sms = msgs[0];
Log.v("TAG", "handleSmsReceived" + (sms.isReplace() ? "(replace)" : "") +
" messageUri: " +
", address: " + sms.getOriginatingAddress() +
", body: " + sms.getMessageBody());
String message = sms.getMessageBody();
}
如果要从pdu创建SmsMessage对象,可以使用新的api
http://developer.android.com/reference/android/telephony/SmsMessage.html#createFromPdu(字节[],java.lang.String)
SmsMessage sms2 = SmsMessage.createFromPdu(msgs[0].getPdu(),format);
总之,用这个:
SmsMessage smsMessage;
if (Build.VERSION.SDK_INT >= 19) { //KITKAT
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(intent);
smsMessage = msgs[0];
} else {
Object pdus[] = (Object[]) bundle.get("pdus");
smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);
}
问题内容: 目标:(注意:选择的答案会生成CDMA(3gpp2)的GSM(3gpp)PDU) 创建可以传入的PDU 。我正在“广播意图”到我的其中一个侦听SMS消息的人。 之一 使用了 “真正的” 短信的 对这些新的 “应用程序SMS” 使用自定义操作。 所以我希望我能够处理两种类型的消息而无需添加额外的代码 (是的,我知道我可以针对不同的动作采取不同的做法,但我想实际完成这项工作,因为我很固执)
我在最新的Android Studio上创建了一个全新的Android项目。我做的第一件事是将`realm'库添加到项目中,方法是将以下内容添加到gradle文件中: 如果我尝试编译,我会得到以下错误: Origine2:C:\users\usmaan.gradle\caches\caches\modules-2\files-2.1\io.realm\realm-android\0.80.3\79
问题内容: 我已经看到了许多在API上使用注释以将其标记为“需要尽快替换”的示例。 但是,在几乎所有这些情况下,代码开发人员不仅继续使用已弃用的API,而且还抑制了弃用警告。 似乎API开发人员的最佳意图最终是创建更多与已实现的业务逻辑无关的代码- 如果不赞成使用API,但在抑制相关警告的情况下继续使用它,则似乎充其量只是代码的降级,并且在IMHO最差的情况下替换不推荐使用的库时,可能会导致应
我已经使用了最新版本的video_player:^0.10.5+1),但显示以下警告。 注意:某些输入文件使用或重写不推荐的API。 注意:使用-xlint重新编译:有关详细信息。 注意:注意:详细信息请使用-xlint:deprecation重新编译。
由于中不推荐使用getExternalStoragePublicDirectory,建议使用其他方法。那么如何指定要将相机应用程序生成的照片存储到文件夹或中的自定义子文件夹? 文档中指出,以下3个选项是新的首选选项: 上下文#GetExternalFilesDir(字符串) 纵隔 意图#action_open_document 选项3也不是一个选择,因为它需要用户通过SAF文件资源管理器选择位置。
我试图将我的项目升级到一些最新版本,但由于项目中的一些依赖项尚未更新,我无法获得空安全性。 我已经求助于sdk版本2.10,同时我更新了所有核心包,解决了所有突破性的更改。一些不推荐的更改(如FlatButton到TextButton,尚未解决)。 我在构建解决方案时遇到了几个问题,在咨询了一些旧的Stack帖子后,我拼凑了gradle文件更新,升级到Android Studio等... 但是,当