getSnapshot не поддерживается на Blackberry - PullRequest
0 голосов
/ 07 сентября 2010

У меня проблема при съемке с использованием метода VideoControl.getSnapshot (). Всегда выдается исключение: getSnapshot не поддерживается. Я использую JRE 5.0.0 с Eclipse и плагином BlackBerry® Java® SDK 5.0.

Сначала я перечисляю кодировку, поддерживаемую выбранным Blackberry SmartPhone (жирный шрифт 9700), с помощью команды System.getProperty ("video.snapshot.encodings") и выбираю одну кодировку из списка и передаю ее как аргумент getSnapshot .

Я тестировал несколько Blackberry, и выдается то же исключение.

Часть кода:

mPlayer = Manager.createPlayer("capture://video?encoding=video/3gpp");

mPlayer.realize();

mPlayer = Manager.createPlayer("capture://video?encoding=video/3gpp");

mPlayer.start();

videoControl = (VideoControl)mPlayer.getControl("VideoControl");

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

Thread.sleep(1000);

UiApplication.getUiApplication().pushScreen(new TempScreen(cameraView));

byte[] snapShot = videoControl.getSnapshot("encoding=jpeg&width=480&height=360&quality=superfine");

Bitmap image = Bitmap.createBitmapFromBytes(snapShot, 0, snapShot.length, 1);

UiApplication.getUiApplication().pushScreen(new TempScreen(image));

}catch (MediaException e){
UiApplication.getUiApplication().pushScreen(new TempScreen("Exception: " + e.getMessage())); }

catch (IOException e){
UiApplication.getUiApplication().pushScreen(new TempScreen("IO Exception: " + e.getMessage())); 
}

catch (InterruptedException e){UiApplication.getUiApplication().pushScreen(new TempScreen("Interrupted Exception: "+ e.getMessage()));}

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Не уверен, что мой ответ актуален после более чем полугода, но, возможно, он будет полезен.

Вы можете попробовать использовать Thread.sleep (1000); перед вызовом getSnapshot (). Проблема может быть связана с этим фактом: «видоискатель должен фактически быть видимым на экране перед вызовом getSnapShot ().»

Так что если вы вызываете getSnapshot сразу после

UiApplication.getUiApplication().pushScreen(new TempScreen(cameraView));
камера не готова к следующему снимку.

Также вы действительно уверены, что API getSnapshot () поддерживается именно на вашем устройстве? Некоторые производители могут не поддерживать его, несмотря на то, что API определяет этот метод. Вы запускали System.getProperty ("video.snapshot.encodings") точно на том же устройстве, где вы тестировали getSnapshot ()?

0 голосов
/ 05 ноября 2012
  Player _p;
  VideoControl _vc ;
  RecordControl _rc ;
  String PATH;
  FileConnection fileconn;
  Object canvas= new Object();

  public static boolean SdcardAvailabulity() {
         String root = null;
         Enumeration e = FileSystemRegistry.listRoots();
         while (e.hasMoreElements()) {
             root = (String) e.nextElement();
             if( root.equalsIgnoreCase("sdcard/") ) {
                 return true;
             }else if( root.equalsIgnoreCase("store/") ) {
                 return false;
             }
         }
         class MySDListener implements FileSystemListener {
             public void rootChanged(int state, String rootName) {
                 if( state == ROOT_ADDED ) {
                     if( rootName.equalsIgnoreCase("sdcard/") ) {
                     }
                 } else if( state == ROOT_REMOVED ) {
                 }
             }
         }
         return true;
    }
protected boolean invokeAction(int action){
      boolean handled = super.invokeAction(action); 
      if(SdcardAvailabulity()){
          PATH = System.getProperty("fileconn.dir.memorycard.videos")+"Video_"+System.currentTimeMillis()+".3gpp";//here "str" having the current Date and Time;
      } else {
          PATH = System.getProperty("fileconn.dir.videos")+"Video_"+System.currentTimeMillis()+".3gpp"; 
      }
      if(!handled){
          if(action == ACTION_INVOKE){   
              try{     

                  if(_p!=null)
                      _p.close();  
              }catch(Exception e){
              }
          }
      }
    return handled;
  }
  public MyScreen(){
      setTitle("Video recording demo");
      ButtonField AddPhoto = new ButtonField("push",ButtonField.FOCUSABLE | ButtonField.FIELD_HCENTER | ButtonField.FIELD_VCENTER | DrawStyle.HCENTER | ButtonField.NEVER_DIRTY | Field.USE_ALL_WIDTH);
      FieldChangeListener PhotoListener = new FieldChangeListener() {
          public void fieldChanged(Field field, int context) {
              ButtonField  Button = (ButtonField) field;
              if (Button.getLabel().equals("push")){


              }
          }
      };
      AddPhoto.setChangeListener(PhotoListener);
      add(AddPhoto);
  }
}
...