📄 sendmms.java
字号:
filename = absolutePath + img.getAttributeValue("src");//在smil文件所在目录下寻找图片文件
checkFile(filename,"img");//检查文件名是否正确,文件格式是否支持,文件是否存在
MediaContent imgContent = new MediaContent();//向彩信中添加图片文件
imgContent.setType(parseContentType(filename));
byte[] byteArray = fileToByte(filename);//调用fileToByte,将文件读为字节数组
if(byteArray.length > MAX_BYTE - size)
throw new Exception("彩信内容超出最大长度限制(128K),请精简内容");
else
{
imgContent.setContent(byteArray);
size+=byteArray.length;//彩信内容大小计数器累加
imgContent.setId(img.getAttributeValue("src"));
content.addContent(imgContent);
}
}
Element audio = par.getChild("audio");
if(audio != null)//如果有audio子节点
{
filename = absolutePath + audio.getAttributeValue("src");//在smil文件所在目录下寻找多媒体文件
checkFile(filename,"audio");//检查文件名是否正确,文件格式是否支持,文件是否存在
MediaContent audioContent = new MediaContent();//向彩信中添加多媒体文件
audioContent.setType(parseContentType(filename));
byte[] byteArray = fileToByte(filename);//调用fileToByte,将文件读为字节数组
if(byteArray.length > MAX_BYTE - size)
throw new Exception("彩信内容超出最大长度限制(128K),请精简内容");
else
{
audioContent.setContent(byteArray);
size+=byteArray.length;//彩信内容大小计数器累加
audioContent.setId(audio.getAttributeValue("src"));
content.addContent(audioContent);
}
}
}
mmsClient.sendMms(content);
}
/**
* 发送文件组织的彩信,自动拼装成SMIL方式传送给网关
* @param numbers 接收人号码
* @param title 彩信标题
* @param args 文件及帧延迟时间
* @param autoPlay 是否自动播放
* @throws Exception
*/
public static void sendMms(String[] numbers, String title, String[] args, String autoPlay) throws Exception
{
int size = 0;//彩信内容大小计数器
MmsContent content = new MmsContent();
content.setNumbers(numbers);
content.setTitle(title);//第三个参数是title
content.setAutoPlay(autoPlay.equals("0")?false:true);//设置是否自动播放
Element root = new Element("smil");
Document doc = new Document(root);
Element body = new Element("body");
root.addContent(body);
for(int i = 0; i < args.length; i+=2)
{
String filename = args[i];//媒体文件名
if(!filename.startsWith("t:"))//如果不是t:开头(t:后直接跟内容文本),进行文件检查
{
checkFile(filename,"");//进行文件检查
}
String dur = args[i+1];//帧延迟时间
Element par = new Element("par");
par.addAttribute("dur",dur+"000ms");
body.addContent(par);
String file = new File(filename).getName();//取得单独的文件名(不包括路径)
String extendName = file.substring(file.lastIndexOf(".")+1).toLowerCase();//媒体文件扩展名
if(filename.startsWith("t:"))//如果是t:开头,直接取后面的文本
{
if(filename.length() == 2)
throw new Exception("t:参数后跟随的文本不能为空");
String text = filename.substring(2);
byte[] byteArray = text.getBytes();
if(byteArray.length > MAX_BYTE - size)
throw new Exception("彩信内容超出最大长度限制(128K),请精简内容");
else
{
Element node = new Element("text");//添加smil text节点
node.addAttribute("src", "t:" + i + ".txt");
par.addContent(node);
MediaContent mc = new MediaContent();//添加subContent
mc.setType(MMConstants.ContentType.TEXT);
mc.setContent(text.getBytes());
mc.setId("t:" + i + ".txt");
content.addContent(mc);
}
}
else if(extendName.equals("txt"))
{
byte[] byteArray = fileToByte(filename);//将文件读取为字节数组
if(byteArray.length > MAX_BYTE - size)
throw new Exception("彩信内容超出最大长度限制(128K),请精简内容");
else
{
Element node = new Element("text");//添加smil text节点
node.addAttribute("src", file);
par.addContent(node);
MediaContent mc = new MediaContent();//添加subContent
mc.setType(MMConstants.ContentType.TEXT);
mc.setContent(byteArray);
mc.setId(file);
content.addContent(mc);
}
}
else if(IMG.contains(extendName))
{
byte[] byteArray = fileToByte(filename);//将文件读取为字节数组
if(byteArray.length > MAX_BYTE - size)
throw new Exception("彩信内容超出最大长度限制(128K),请精简内容");
else
{
Element node = new Element("img");//添加smil img节点
node.addAttribute("src", file);
par.addContent(node);
MediaContent mc = new MediaContent();//添加subContent
mc.setType(parseContentType(file));
mc.setContent(byteArray);
mc.setId(file);
content.addContent(mc);
}
}
else if(AUDIO.contains(extendName))
{
byte[] byteArray = fileToByte(filename);//将文件读取为字节数组
if(byteArray.length > MAX_BYTE - size)
throw new Exception("彩信内容超出最大长度限制(128K),请精简内容");
else
{
Element node = new Element("audio");//添加smil audio节点
node.addAttribute("src", file);
par.addContent(node);
MediaContent mc = new MediaContent();//添加subContent
mc.setType(parseContentType(file));
mc.setContent(byteArray);
mc.setId(file);
content.addContent(mc);
}
}
}
XMLOutputter outputter = new XMLOutputter(" ", true);//设置四个空格缩进
ByteArrayOutputStream bos = new ByteArrayOutputStream();
outputter.output(doc, bos);//将DOM输出到输出流
MediaContent mc = new MediaContent();//添加smil的subContent
mc.setType(MMConstants.ContentType.SMIL);
mc.setContent(bos.toByteArray());
mc.setId("aaa");
content.addContent(mc);
mmsClient.sendMms(content);
}
/**
* 检查文件名是否正确,文件格式是否支持,文件是否存在
* @param filename 文本文件文件名
* @throws Exception
*/
public static void checkFile(String filename, String type) throws Exception
{
if(filename.lastIndexOf(".") == -1 || filename.endsWith("."))//如果文件中没有.或者.在最后 抛错
throw new Exception(filename + "文件名不正确");
String extendName = filename.substring(filename.lastIndexOf(".")+1);//文件扩展名
if(type.equals("txt"))//检查文本类型文件
{
if(!extendName.equalsIgnoreCase("txt"))//如果不是文本文件,抛错
throw new Exception(filename + "文件不被支持,彩信中只能使用txt格式的文本文件");
}
else if(type.equals("img"))//检查图片类型文件
{
if(!IMG.contains(extendName.toLowerCase()))//如果不是已知图片扩展名,抛错
throw new Exception(filename + "文件不被支持,彩信中只能使用"+IMG+"格式的图片");
}
else if(type.equals("audio"))//检查多媒体类型文件
{
if(!AUDIO.contains(extendName.toLowerCase()))//如果不是已知多媒体扩展名,抛错
throw new Exception(filename + "文件不被支持,彩信中只能使用"+AUDIO+"格式的多媒体文件");
}
else
{
if(!extendName.equalsIgnoreCase("txt") && !AUDIO.contains(extendName.toLowerCase()) && !IMG.contains(extendName.toLowerCase()))//如果不是支持文件格式的扩展名,抛错
throw new Exception(filename + "文件不被支持,彩信中只能使用txt,"+IMG+","+AUDIO+"格式的媒体文件");
}
File file = new File(filename);
if(!file.exists() || !file.isFile())//如果文件不存在或者不是一个有效的文件,抛错
throw new Exception(filename+"文件不存在,请检查是否存在此文件");
}
/**
* 将文件读入成byte[]字节数组
* @param filename 文件名
* @return byte[]字节数组
* @throws Exception
*/
public static byte[] fileToByte(String filename) throws Exception
{
FileInputStream stream = new FileInputStream(filename);//将文件读入为byte[]
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = stream.read(b)) != -1)
out.write(b, 0, n);
stream.close();
out.close();
return out.toByteArray();
}
/**
* 根据文件扩展名得到MMContent类型
* @param filename 文件名
* @return MMContentType
*/
public static MMContentType parseContentType(String filename)
{
String extendName = filename.substring(filename.lastIndexOf(".")+1).toLowerCase();//媒体文件扩展名
if(extendName.equals("gif"))
return MMConstants.ContentType.GIF;
if(extendName.equals("jpg") || extendName.equals("jpeg"))
return MMConstants.ContentType.JPEG;
if(extendName.equals("wbmp"))
return MMConstants.ContentType.WBMP;
if(extendName.equals("png"))
return MMConstants.ContentType.PNG;
if(extendName.equals("arm"))
return MMConstants.ContentType.AMR;
if(extendName.equals("arm"))
return MMConstants.ContentType.AMR;
if(extendName.equals("mid") || extendName.equals("midi"))
return MMConstants.ContentType.MIDI;
if(extendName.equals("mmf"))
return MMConstants.ContentType.MMF;
if(extendName.equals("wav"))
return MMConstants.ContentType.WAV;
if(extendName.equals("3gp"))
return MMConstants.ContentType.VIDEO_3GPP;
if(extendName.equals("mp4"))
return MMConstants.ContentType.VIDEO_MP4;
return MMConstants.ContentType.TEXT;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -