j2me中实现电话呼叫功能

来源:互联网 发布:淘宝网。 编辑:程序博客网 时间:2024/04/23 14:18

/**
* 在J2me中实现电话呼叫功能
* platformRequest()方法来请求设备来完成特定的请求,
* 请求的内容由platformRequest()方法的String类型的
* 参数url来标识。可能是调用浏览器打开某个特定的wap页面,
* 也可以是呼叫电话。
*/
package src;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.lcdui.*;

public class Call extends MIDlet implements CommandListener {

private Display display;

private List list;

public Call() {
   super();

}

protected void startApp() throws MIDletStateChangeException {
   if (display == null) {
    display = Display.getDisplay(this);
    list = new List("测试电话功能", List.IMPLICIT);
    list.append("5550000", null);
    list.append("1302222", null);
    list.setCommandListener(this);
   }
   display.setCurrent(list);

}

protected void pauseApp() {
   // TODO Auto-generated method stub

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
   // TODO Auto-generated method stub

}

public void commandAction(Command arg0, Displayable arg1) {
   if (arg0 == List.SELECT_COMMAND) {
    String number = list.getString(list.getSelectedIndex());
    try {
     this.platformRequest("tel:" + number);
    } catch (ConnectionNotFoundException ex) {
     ex.printStackTrace();
    }
   }

}

}

ps:MIDlet.platformRequest方法可以支持很多的应用调用(如tel、fax、http访问无线网络等)或者应用的安装,但是具体的使用情况要看具体的手机提供商是否在手机上提供此类的功能了。

详细的解释:

一、调用过程:

调用platformRequest方法后,用指定的URL表示的请求被发给了设备:

情况1:
当手机平台上相应的能力并且具有有效资源的话,手机设备“可以”将用于处理请求的相应应用调入到前台,并使用户和它进行交互,同时保持当前的MIDlet suite在后台运行。

情况2:
如 果设备平台没有相应的能力或者没有有效资源,则它“可能”等待处理这个URL请求直到发出该请求的MIDlet suite退出。在这种情况下,当发出要求的MIDlet suite退出时,设备平台“必须”将后台的应用(如果存在的话)切换到前台,以恢复其与用户的交互。

二、方法调用的影响:

platformRequest 是一种非阻塞的方法,所以该方法不能够将多个请求进行排队。在请求被处理前MIDlet suite必须退出的平台只能处理最后的一个请求。而在MIDlet suite和请求能够同时处理的平台,每个发自MIDlet suite的请求必须被实时的传送给平台软件来处理。

如果URL所描述的请求引用了一个MIDlet suite(无论是一个应用程序描述还是一个jar文件),处理这个请求的应用将解释URL,将其作为安装某个package的请求。在这种情况下,平台 将进行一般MIDlet suite安装,用户也将控制这个安装过程(包括取消安装、下载、确认安装)。如果被安装的MIDlet suite是当前运行的MIDlet suite的更新版本,则在执行升级之前,平台将停止当前运行的低版本MIDlet suite。有一些平台,在安装进行之时当前运行的MIDlet suite可能需要停止。

如果URL描述的内容是一种tel:< number>的方式,这种方式在RFC2806中有所描述。平台必须解释这个URL将它作为初始化语音呼叫的请求。如果平台提供“电话”程序,则 这个请求必须被传送到“电话”应用程序去处理。如果平台提供此功能,则必须具备能够建立本地和全局电话呼叫的能力,并执行DTMF(电话管理功能)传送拨 号。但,并不是所有的RFC2806定义的URL格式都被实现,尤其是区号或者电话终端需要的内容。isdn子网,服务提供商和扩展特性可能被忽略掉。

而且设备可以选择性的支持不在上面列表中的URL的附加定义。

platformRequest 方法可能会对用户的经济造成影响,比如使用无线网络、或者语音呼叫。所以在程序执行之前,平台必须获得用户的允许。这个获得用户允许的实现方式是比较自由 的。例如在一些平台上每次询问用户时出现一个对话框。而另外一些平台可能执行相应的应用程序,弹出URL或者电话号码的输入字框并保持静止等待状态,直到 用户点击装载或者拨号按钮后才执行。