⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmsnotificationmessage.java~4~

📁 gsm modem 发送短信 闪信 WAP PUSH开发例子
💻 JAVA~4~
字号:
package gsmmodem.message;

import org.jsmsengine.*;
import java.util.*;

public class MMSNotificationMessage extends COutgoingMessage {
    //private static final String UDH="0B05040B8423F00003030101";
    private static final String UDH = "0605040B8423F0";
    private static final String MMS_HEAD_CONTENTTYPE =
            "0006226170706C69636174696F6E2F766E642E7761702E6D6D732D6D65737361676500";
    private static final String MMS_HEAD_X_MMS_WAP_APPLICATION_ID = "AF84";
    private static final String MMS_HEAD_X_MMS_MESSAGE_TYPE = "8C82";
    private static final String MMS_HEAD_X_MMS_VERSION = "8D90";
    private static final String MMS_HEAD_X_MMS_MESSAGE_CLASS = "8A80";
    private String MMS_HEAD_X_TRANSACTION_ID;
    private String MMS_HEAD_X_MMS_MESSAGE_SIZE;
    private String MMS_HEAD_X_MMS_EXPIRY;
    private String MMS_HEAD_FROM;
    private String MMS_HEAD_SUBJECT;
    private String mobile;
    private String MMS_HEAD_X_MMS_CONTENT_LOCATION;

    public MMSNotificationMessage() {
        super();
        setDate(new Date());
    }

    //wap push head1
    //mms head application/vnd.wap.mms-message
    //AF-> X-WAP-APPLICATION-ID 84->04+80
    //8C-> X-MMS-MESSAGE-TYPE 82->m-notification-ind 头信息中只有此是必须的,其他均为可选择的
    //98-> X-MMS-TRANSACTION-ID 61->ID=61 00->以00补全
    //8D-> X-MMS-VERSION 90->1.0
    //8A-> X-MMS-MESSAGE-CLASS 80->PERSONAL(82->INFORMATIONAL)
    //8E-> X-MMS-MESSAGE-SIZE 02->LENGTH 0E10->SIZE(16*16*14+1*16+0=3600[BYTES])
    //88-> X-MMS-EXPIRY 05->LENGTH 81->RELATIVE(80->ABSOULUTE) 03->LENGTH 015180->TIME(1*16*16*16*16+5*16*16*16+1*16*16+8*16=86144[SECONDS])
    //83-> MMS ADDRESS 00->END OF MMS ADDRESS
    //89-> FROM 10-LENGTH 80->BEGIN OF QUATO 00->END OF FROM
    //97-> TO 00->END OF TO
    //96-> SUBJECT 00->END OF SUBJECT
    //84-> CONTENT-TYPE 00->END OF CONTENT-TYPE

    public String getPDU(String smscNumber) {
        String ret = "0051000BA13125517849F300F5A77C0B05040B8423F000031101013806226170706C69636174696F6E2F766E642E7761702E6D6D732D6D65737361676500AF848C82983346363638383231008D90890680796F75790096796F757220706963008A808E016188058103093A8083687474703A2F2F3231392E3233382E3233322E35362F2F61612E6D6D7300";
        return ret;
//        StringBuffer sb = new StringBuffer();
//        sb.append("0051000BA1");
//        sb.append(toBCDFormat(mobile));
//        sb.append("00F5A7");
//        int length = 0;
//        length = length + UDH.length();
//        length = length + MMS_HEAD_CONTENTTYPE.length();
//        length = length + MMS_HEAD_X_MMS_MESSAGE_CLASS.length();
//        length = length + MMS_HEAD_X_MMS_MESSAGE_TYPE.length();
//        length = length + MMS_HEAD_X_MMS_VERSION.length();
//        length = length + MMS_HEAD_X_MMS_WAP_APPLICATION_ID.length();
//        length = length + MMS_HEAD_FROM.length();
//        length = length + MMS_HEAD_SUBJECT.length();
//        length = length + MMS_HEAD_X_MMS_EXPIRY.length();
//        length = length + MMS_HEAD_X_MMS_MESSAGE_SIZE.length();
//        length = length + MMS_HEAD_X_TRANSACTION_ID.length();
//        length = length + MMS_HEAD_X_MMS_CONTENT_LOCATION.length();
//        length = length / 2;
//        sb.append(Integer.toHexString(length));
//        sb.append(UDH);
//        sb.append(MMS_HEAD_CONTENTTYPE);
//        sb.append(MMS_HEAD_X_MMS_WAP_APPLICATION_ID);
//        sb.append(MMS_HEAD_X_MMS_MESSAGE_TYPE);
//        sb.append(MMS_HEAD_X_TRANSACTION_ID);
//        sb.append(MMS_HEAD_X_MMS_VERSION);
//        sb.append(MMS_HEAD_FROM);
//        sb.append(MMS_HEAD_SUBJECT);
//        sb.append(MMS_HEAD_X_MMS_MESSAGE_CLASS);
//        sb.append(MMS_HEAD_X_MMS_MESSAGE_SIZE);
//        sb.append(MMS_HEAD_X_MMS_EXPIRY);
//        sb.append(MMS_HEAD_X_MMS_CONTENT_LOCATION);
//        return sb.toString().toUpperCase();
    }

    public MMSNotificationMessage(String recipient, String url,
                                  String transactionid, int size, int expiry,
                                  String from, String subject) {
        String length, ilength;
        setDate(new Date());
        MMS_HEAD_X_MMS_CONTENT_LOCATION = "83" + getUTF8Text(url) + "00";
        mobile = recipient;
        MMS_HEAD_X_TRANSACTION_ID = "98" + transactionid + "00";
        MMS_HEAD_SUBJECT = "96" + getUTF8Text(subject) + "00";
        MMS_HEAD_X_MMS_MESSAGE_SIZE = getSize(MMS_HEAD_X_MMS_MESSAGE_SIZE, size);
        MMS_HEAD_X_MMS_EXPIRY = getExpiry(MMS_HEAD_X_MMS_EXPIRY, expiry);
        MMS_HEAD_FROM = "890780" + getUTF8Text(from) + "00";
    }

    private static String getUTF8Text(String s) {
        String ret = "";
        try {
            byte[] utf8 = s.getBytes("UTF8");
            ret = bytesToHexStr(utf8).toUpperCase();
        } catch (Exception e) {}
        return ret;
    }

    private static String toBCDFormat(String s) {
        String bcd;
        int i;

        if ((s.length() % 2) != 0) s = s + "F";
        bcd = "";
        for (i = 0; i < s.length(); i += 2) bcd = bcd + s.charAt(i + 1) +
                                                  s.charAt(i);
        return bcd;
    }

    public static final char[] hex = {
                                     '0', '1', '2', '3', '4', '5', '6', '7',
                                     '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
    };

    public static String bytes2hexStr(byte[] arr, int len) {
        StringBuffer sb = new StringBuffer(len * 2);
        for (int i = 0; i < len; i++) {
            int hi = (arr[i] >>> 4) & 0xf;
            sb.append(hex[hi]);
            int low = (arr[i]) & 0xf;
            sb.append(hex[low]);
        }
        return sb.toString();
    }

    public static String bytesToHexStr(byte[] arr) {
        return bytes2hexStr(arr, arr.length);
    }

    //8E-> X-MMS-MESSAGE-SIZE 02->LENGTH 0E10->SIZE(16*16*14+1*16+0=3600[BYTES])
    //将size转成16进制的长度格式,如果是奇位数,则前面补0
    //length 是计算出的长度,如果是奇位数,则前面补0,在最前面加8E表示为X-MMS-MESSAGE-SIZE
    public String getSize(String s, int size) {
        String length = "";
        s = Integer.toHexString(size);
        if (s.length() % 2 == 1)
            s = "0" + s;
        length = new Integer(s.length() / 2).toString();
        if (length.length() % 2 == 1)
            s = "8E0" + length + s;
        else
            s = "8E" + length + s;

        return s.toUpperCase();
    }

    //88-> X-MMS-EXPIRY 05->LENGTH 81->RELATIVE(80->ABSOULUTE) 03->LENGTH 015180->TIME(1*16*16*16*16+5*16*16*16+1*16*16+8*16=86144[SECONDS])
    //将expiry转成16进制的长度格式,如果是奇位数,则前面补0
    //length 是计算出的长度,如果是奇位数,则前面补810,ilength 长度为length+2,位置在81之前,如果为奇位数,则在前补0,在其之前补88表示X-MMS-EXPIRY
    public String getExpiry(String s, int expiry) {
        String length = "";
        String ilength = "";
        s = Integer.toHexString(expiry);
        if (s.length() % 2 == 1)
            s = "0" + s;
        length = new Integer(s.length() / 2).toString();
        ilength = new Integer(s.length() / 2 + 2).toString();
        if (length.length() % 2 == 1)
            s = "810" + length + s;
        else
            s = "81" + length + s;
        if (ilength.length() % 2 == 1)
            s = "880" + ilength + s;
        else
            s = "88" + ilength + s;

        return s.toUpperCase();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -