栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

创建适用于SmsMessage.createFromPdu()(GSM 3gpp)的Android PDU

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建适用于SmsMessage.createFromPdu()(GSM 3gpp)的Android PDU

也许此代码片段没有您想要的许多详细信息字段,但是出于我的 简单目的, 它可以像其他短信一样调用通知。

    private static void createFakeSms(Context context, String sender,        String body) {    byte[] pdu = null;    byte[] scBytes = PhoneNumberUtils .networkPortionToCalledPartyBCD("0000000000");    byte[] senderBytes = PhoneNumberUtils .networkPortionToCalledPartyBCD(sender);    int lsmcs = scBytes.length;    byte[] dateBytes = new byte[7];    Calendar calendar = new GregorianCalendar();    dateBytes[0] = reverseByte((byte) (calendar.get(Calendar.YEAR)));    dateBytes[1] = reverseByte((byte) (calendar.get(Calendar.MONTH) + 1));    dateBytes[2] = reverseByte((byte) (calendar.get(Calendar.DAY_OF_MONTH)));    dateBytes[3] = reverseByte((byte) (calendar.get(Calendar.HOUR_OF_DAY)));    dateBytes[4] = reverseByte((byte) (calendar.get(Calendar.MINUTE)));    dateBytes[5] = reverseByte((byte) (calendar.get(Calendar.SECOND)));    dateBytes[6] = reverseByte((byte) ((calendar.get(Calendar.ZONE_OFFSET) + calendar .get(Calendar.DST_OFFSET)) / (60 * 1000 * 15)));    try {        ByteArrayOutputStream bo = new ByteArrayOutputStream();        bo.write(lsmcs);        bo.write(scBytes);        bo.write(0x04);        bo.write((byte) sender.length());        bo.write(senderBytes);        bo.write(0x00);        bo.write(0x00); // encoding: 0 for default 7bit        bo.write(dateBytes);        try { String sReflectedClassName = "com.android.internal.telephony.GsmAlphabet"; Class cReflectedNFCExtras = Class.forName(sReflectedClassName); Method stringToGsm7BitPacked = cReflectedNFCExtras.getMethod(         "stringToGsm7BitPacked", new Class[] { String.class }); stringToGsm7BitPacked.setAccessible(true); byte[] bodybytes = (byte[]) stringToGsm7BitPacked.invoke(null,         body); bo.write(bodybytes);        } catch (Exception e) {        }        pdu = bo.toByteArray();    } catch (IOException e) {    }    Intent intent = new Intent();    intent.setClassName("com.android.mms", "com.android.mms.transaction.SmsReceiverService");    intent.setAction("android.provider.Telephony.SMS_RECEIVED");    intent.putExtra("pdus", new Object[] { pdu });    intent.putExtra("format", "3gpp");    context.startService(intent);}private static byte reverseByte(byte b) {    return (byte) ((b & 0xF0) >> 4 | (b & 0x0F) << 4);}

希望你会发现有用的东西

更新:

 public static final SmsMessage[] getMessagesFromIntent(     Intent intent) { Object[] messages = (Object[]) intent.getSerializableExtra("pdus"); byte[][] pduObjs = new byte[messages.length][]; for (int i = 0; i < messages.length; i++) {     pduObjs[i] = (byte[]) messages[i]; } byte[][] pdus = new byte[pduObjs.length][]; int pduCount = pdus.length; SmsMessage[] msgs = new SmsMessage[pduCount]; for (int i = 0; i < pduCount; i++) {     pdus[i] = pduObjs[i];     msgs[i] = SmsMessage.createFromPdu(pdus[i]); } return msgs;        }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383062.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号