Java me 带有platformRequest的RecordControl可以工作吗?

Java me 带有platformRequest的RecordControl可以工作吗?,java-me,midp,mmapi,Java Me,Midp,Mmapi,我的目标是产生一个应用程序,拨一个电话号码,然后记录保存 我已经测试了这段代码,它可以录制声音,然后在我的5310上正确播放 import java.io.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.media.*; import javax.microedition.media.control.*; public class VoiceR

我的目标是产生一个应用程序,拨一个电话号码,然后记录保存

我已经测试了这段代码,它可以录制声音,然后在我的5310上正确播放

import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class VoiceRecordMidlet extends MIDlet {
      private Display display;

      public void startApp() {
            display = Display.getDisplay(this);
            display.setCurrent(new VoiceRecordForm());
      }

      public void pauseApp() {
      }

      public void destroyApp(boolean unconditional) {
            notifyDestroyed();
      }
}

class VoiceRecordForm extends Form implements CommandListener {
      private StringItem message;
      private StringItem errormessage;
      private final Command record, play;
      private Player player;
      private byte[] recordedAudioArray = null;
      public VoiceRecordForm() {
            super("Recording Audio");
            message = new StringItem("", "Select Record to start recording.");
            this.append(message);
            errormessage = new StringItem("", "");
            this.append(errormessage);
            record = new Command("Record", Command.OK, 0);
            this.addCommand(record);
            play = new Command("Play", Command.BACK, 0);
            this.addCommand(play);
            this.setCommandListener(this);
      }


  public void commandAction(Command comm, Displayable disp) {
            if (comm == record) {

              System.getProperty("audio.encodings");
                System.getProperty("supports.audio.capture");
              System.getProperty("supports.recording");
                  t.start();

            }
            else if (comm == play) {
                  try {

                        ByteArrayInputStream recordedInputStream = new ByteArrayInputStream(recordedAudioArray);
                        Player p2 = Manager.createPlayer(recordedInputStream, "audio/amr");
                        p2.prefetch();
                        p2.start();
                  }
                  catch (Exception e) {
                        errormessage.setLabel("Error");
                        errormessage.setText(e.toString());
                  }
            }
             }

         Thread t = new Thread() {
                        public void run() {
                              try {

                                 System.getProperty("audio.encodings");


                                    player = Manager.createPlayer("capture://audio");
                                    player.realize();
                                    RecordControl rc = (RecordControl) player.getControl("RecordControl");
                                    ByteArrayOutputStream output = new ByteArrayOutputStream();
                                    rc.setRecordStream(output);
                                    rc.startRecord();
                                    player.start();
                                    message.setText("Recording...");
                                    Thread.sleep(5000);
                                    message.setText("Recording Done!");
                                    rc.commit();
                                    recordedAudioArray = output.toByteArray();
                                    player.close();
                              } catch (Exception e) {
                                    errormessage.setLabel("Error");
                                    errormessage.setText(e.toString());
                              }
             };



};
}
然后我在我的代码中做了一些修改来记录保守

import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class VoiceRecordMidlet extends MIDlet {
      private Display display;

Form f = new VoiceRecordForm();

      public void startApp() {

            display = Display.getDisplay(this);
            display.setCurrent(f);
      }

      public void pauseApp() {
      }

      public void destroyApp(boolean unconditional) {
            notifyDestroyed();
      }


class VoiceRecordForm extends Form implements CommandListener {
    private MIDlet m;
      private StringItem message;
      private StringItem errormessage;
      private final Command record, play;
      private Player player;
      private byte[] recordedAudioArray = null;
              private TextField phoneField;
           private String n;
      public VoiceRecordForm() {
            super("Recording Audio");
            message = new StringItem("", "Select Record to start recording.");
            this.append(message);

            errormessage = new StringItem("", "");
            this.append(errormessage);
            record = new Command("Record", Command.SCREEN, 0);
            this.addCommand(record);
            play = new Command("Play", Command.BACK, 0);
            this.addCommand(play);
            this.phoneField =new TextField("number","",20,phoneField.PHONENUMBER);
            append(phoneField);
            this.setCommandListener(this);
      }


  public void commandAction(Command comm, Displayable disp) {
            if (comm == record) {

              System.getProperty("audio.encodings");
                System.getProperty("supports.audio.capture");
              System.getProperty("supports.recording");
 t.start();
                   try
   {
       n=phoneField.getString().trim();

       platformRequest("tel:"+n);


   }
  catch(javax.microedition.io.ConnectionNotFoundException e)

  {
      e.printStackTrace();
  }

 }
  else if (comm == play) {

  try {



               ByteArrayInputStream recordedInputStream = new ByteArrayInputStream(recordedAudioArray);
                        Player p2 = Manager.createPlayer(recordedInputStream, "audio/amr");

                        p2.prefetch();
                        p2.start();

                  }
                  catch (Exception e) {
                        errormessage.setLabel("Error");
                        errormessage.setText(e.toString());
                  }
            }
             }

         Thread t = new Thread() {
                        public void run() {
                              try {

                                 System.getProperty("audio.encodings");


                                    player = Manager.createPlayer("capture://audio");
                                    player.realize();
                                    RecordControl rc = (RecordControl) player.getControl("RecordControl");
                                    ByteArrayOutputStream output = new ByteArrayOutputStream();
                                    rc.setRecordStream(output);
                                    rc.startRecord();
                                    player.start();
                                    message.setText("Recording...");
                                    Thread.sleep(5000);
                                    message.setText("Recording Done!");
                                    rc.commit();
                                    recordedAudioArray = output.toByteArray();
                                    player.close();
                              } catch (Exception e) {
                                    errormessage.setLabel("Error");
                                    errormessage.setText(e.toString());
                              }
             };



};
}}
但当按下record命令时,出现以下错误

**Error:    javax.microedition.media.MediaException: RecordControl**

有什么需要帮忙的吗?

你有整理过吗?我在诺基亚113上遇到了类似的错误:不,如果我记得很清楚的话,那就不可能了。我最终发现我可以写入文件。。。但不向流中写入。。。我遇到了一个巨大的障碍,虽然,在发现JSR185非常非常安静地删除了必须支持pcm条款。。。113使用GSM610格式编写wav,唉。。。