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

📄 sendmms.java

📁 应用于华为中国移动甘肃项目组的彩信发送平台全套代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				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 + -