2011-10-08 46 views

回答

2

最後從BB文檔找到解決方案。

import net.rim.device.api.ui.*; 
import net.rim.device.api.ui.container.*; 
import net.rim.device.api.ui.component.*; 
import net.rim.device.api.system.*; 
import java.lang.*; 
import javax.microedition.media.*; 
import java.io.*; 
import javax.microedition.media.control.*; 

public class VideoRecordingDemo extends UiApplication 
{ 
    public static void main(String[] args) 
    { 
     VideoRecordingDemo app = new VideoRecordingDemo(); 
     app.enterEventDispatcher(); 
    } 

    public VideoRecordingDemo() 
    { 
     pushScreen(new VideoRecordingDemoScreen()); 
    } 

    private class VideoRecordingDemoScreen extends MainScreen 
    { 
     private VideoRecorderThread _recorderThread; 

     public VideoRecordingDemoScreen() 
     { 
      setTitle("Video recording demo"); 

      addMenuItem(new StartRecording()); 
      addMenuItem(new StopRecording()); 
     } 

     private class StartRecording extends MenuItem 
     { 
      public StartRecording() 
      { 
       super("Start recording", 0, 100); 
      } 

      public void run() 
      { 
       try 
       { 
        VideoRecorderThread newRecorderThread = new VideoRecorderThread(); 
        newRecorderThread.start(); 
        _recorderThread = newRecorderThread; 
       } 
       catch (Exception e) 
       { 
        Dialog.alert(e.toString()); 
       } 
      } 
     } 

     private class StopRecording extends MenuItem 
     { 
      public StopRecording() 
      { 
       super("Stop recording", 0, 100); 
      } 

      public void run() 
      { 
       try 
       { 
        if (_recorderThread != null) 
        { 
         _recorderThread.stop(); 
        } 
       } 
       catch (Exception e) 
       { 
        Dialog.alert(e.toString()); 
       } 
      } 
     } 

     private class VideoRecorderThread extends Thread implements javax.microedition.media.PlayerListener 
     { 
      private Player _player; 
      private RecordControl _recordControl; 

      VideoRecorderThread() 
      { 
      } 

      public void run() 
      { 
       try 
       { 
        _player = javax.microedition.media.Manager.createPlayer("capture://video?encoding=video/3gpp"); 

        _player.addPlayerListener(this); 

        _player.realize(); 
        VideoControl videoControl = (VideoControl) _player.getControl("VideoControl"); 
        _recordControl = (RecordControl) _player.getControl("RecordControl"); 

        Field videoField = (Field) videoControl.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, "net.rim.device.api.ui.Field"); 

        try 
        { 
         videoControl.setDisplaySize(Display.getWidth(), Display.getHeight()); 
        } 
        catch(MediaException me) 
        { 
         // setDisplaySize is not supported 
        } 

        add(videoField); 

        _recordControl.setRecordLocation("file:///store/home/user/VideoRecordingTest.3gpp"); 

        _recordControl.startRecord(); 
        _player.start(); 

       } 
       catch(IOException e) 
       { 
        Dialog.alert(e.toString()); 
       } 
       catch(MediaException e) 
       { 
        Dialog.alert(e.toString()); 
       } 
      } 
      public void stop() 
      { 
       if (_player != null) 
       { 
        _player.close(); 
        _player = null; 
       } 

       if (_recordControl != null) 
       { 
        _recordControl.stopRecord(); 

        try 
        { 
         _recordControl.commit(); 
        } 
        catch (Exception e) 
        { 
         Dialog.alert(e.toString()); 
        } 
        _recordControl = null; 
       } 
      } 

      public void playerUpdate(Player player, String event, Object eventData) 
      { 
       Dialog.alert("Player " + player.hashCode() + " got event " + event + ": " + eventData); 
      } 
     } 
    } 
} 
3
ApplicationManager.getApplicationManager().launch("net_rim_bb_videorecorder"); 

這將幫助您打開應用程序。如果你想開始錄音,你可能需要模擬一個鍵盤輸入。

btw:CameraArguments(ARG_VIDEO_RECORDER)自jde4.7開始引入,因此它與以前的操作系統不兼容。所以以前的方法更好。

相關問題