日期:2014-05-20  浏览次数:20822 次

手机测试拍照问题
请问怎样才能测试
手机是否支持拍照,如果支持拍照,可以拍照并显示照片。
请高手指点. 谢谢

------解决方案--------------------
首先需要一部支持拍照功能和java的手机,并且需要了解一下你的手机的java支持不支持MMAPI(Mobile Media API ),如果程序在你的手机上无法执行,那说明你的手机不支持,那就没办法了,换个支持的手机吧:)

既然是把照片传到网上去,还需要你有一个服务器,其实不一定是服务器,只要是有一个独立的IP,可以在公网访问的到,就可以了,你完全可以使用自己拨号上网的机器,再装一个动态域名的工具实现。

有了以上两个条件,我们就可以建立一个我们自己的网络相册了!

首先,需要启动摄像头,代码如下:

package com.infinitouch.xiaowei.mobile;

import javax.microedition.lcdui.*;
import javax.microedition.media.Player;
import javax.microedition.media.control.VideoControl;
import javax.microedition.media.Manager;
import javax.microedition.media.*;

public class CatchScreen extends Canvas {
Player p;
VideoControl vc;
public static int bytes = 0;
public CatchScreen() {
this.setFullScreenMode(true);
try {
p = Manager.createPlayer("capture://video");
p.realize();
vc = (VideoControl) p.getControl("VideoControl");
if (vc != null) {
vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this); vc.setDisplaySize(128,160);
}
vc.setVisible(true); //设置可见
p.start();
} catch (Exception e) {}
}

//按任意键拍照

public void keyPressed(int key)
{
HttpThread thread = new HttpThread();
thread.setData(vc);
thread.start();
}

protected void paint(Graphics g) {
/** @todo Add paint codes */
}

}

以上就是启动摄像头的代码,这里我们的Screen是继承了Cavans类,如果是继承其他,比如form,需要稍作修改,网上也有介绍这方面的文章,这里就不多说了。

拍照和上传功能我们单独放在一个线程里面实现,因为拍照和网络传输都会阻塞,如果他们和当前屏幕处于一个线程中,在拍照和传输的时候界面就会没有反应,这是我们不希望的,因此单独开一个线程是最好的办法。

package com.infinitouch.xiaowei.mobile;

import javax.microedition.io.*;
import java.io.*;
import javax.microedition.media.control.VideoControl;
import javax.microedition.media.*;

public class HttpThread extends Thread {

byte[] data;
VideoControl vc;
public void setData(VideoControl vc)
{
this.vc = vc;
}

public void run()
{
try {
data = vc.getSnapshot(null);//拍照,生成png格式的数据
} catch (MediaException ex) {
ex.printStackTrace();
}

try {
HttpConnection conn = (HttpConnection) Connector.open("http://192.168.0.12/mmsmonth/post.jsp");
conn.setRequestMethod("POST");
DataOutputStream out = conn.openDataOutputStream();
out.write(data, 0, data.length);//发送数据至服务器
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

}