package com.test;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* 使用net方式可以在线播放
* @author gx_jin
*
* @time: 2011-11-7
*/
public class MusicTest extends MIDlet implements Runnable
{
private Command play;
private Command exit;
private Form ui;
private TextField input;
private Display dis;
public MusicTest()
{
dis = Display.getDisplay(this);
play = new Command("play", Command.OK, 1);
exit = new Command("exit", Command.EXIT, 1);
ui = new Form("音乐测试程序");
input = new TextField("enter address", "http://59.151.36.12/gddemo/A8.aac", 300, TextField.URL);
ui.append(input);
ui.addCommand(play);
ui.addCommand(exit);
ui.setCommandListener(new CommandListener() {
public void commandAction(Command c, Displayable arg1)
{
if (c == play)
{
System.out.println(input.getString());
Thread thread = new Thread(MusicTest.this);
thread.start();
} else if (c == exit)
{
try
{
destroyApp(false);
} catch (MIDletStateChangeException e)
{
e.printStackTrace();
}
notifyDestroyed();
}
}
});
dis.setCurrent(ui);
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
// TODO Auto-generated method stub
}
protected void pauseApp()
{
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException
{
// TODO Auto-generated method stub
}
private static final String STREAMABLE = "?streamable=true";
public void playSound(String url)
{
Player s_player = null;
try
{
InputStream is = getInputStream(url+STREAMABLE);
if (is == null)
{
input.setString("is==null");
}
s_player = Manager.createPlayer(is, "audio/aac");
if (s_player == null)
{
input.setString("s_player==null");
}
s_player.addPlayerListener(new PlayerListener() {
public void playerUpdate(Player arg0, String arg1, Object arg2)
{
}
});
s_player.realize();
s_player.prefetch();
s_player.start();
} catch (Exception e)
{
e.printStackTrace();
// input.setString(e.getMessage()+"---end--");
}
}
private InputStream getInputStream(String url) throws IOException
{
HttpConnection conn = null;
if (Valuse.netWork == Valuse.cmwap)
{
String remainUrl = url.substring("http://".length());
int index = remainUrl.indexOf("/");
String path = "";
if (index != -1)
{
path = remainUrl.substring(index);
remainUrl = remainUrl.substring(0, index);
}
String host = "";
String port = "";
index = remainUrl.indexOf(":");
if (index != -1)
{
host = remainUrl.substring(0, index);
port = remainUrl.substring(index + 1);
} else
{
host = remainUrl;
port = null;
}
String proxyHost = "10.0.0.172";
String proxyPort = "80";
String cnwapUrl = "http://" + proxyHost + ":" + proxyPort + path;
conn = (HttpConnection) Connector.open(cnwapUrl, Connector.READ_WRITE, true);
if (port == null)
{
conn.setRequestProperty("X-Online-Host", host + ":80");
} else
{
conn.setRequestProperty("X-Online-Host", host + ":" + port);
}
conn.setRequestMethod(HttpConnection.POST);
String contentType = conn.getHeaderField("Content-Type");
input.setString("contentType="+contentType);
if (contentType != null && contentType.indexOf("text/vnd.wap.wml") != -1)
{
conn.close();
conn = (HttpConnection) Connector.open(cnwapUrl, Connector.READ_WRITE, true);
if (port == null)
{
conn.setRequestProperty("X-Online-Host", host + ":80");
} else
{
conn.setRequestProperty("X-Online-Host", host + ":" + port);
}
conn.setRequestMethod(HttpConnection.POST);
}
} else
{
conn = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true);
}
InputStream is=conn.openInputStream();
return is;
}
public void run()
{
String url = input.getString();
playSound(url);
}
}