【问题标题】:Turn on Flash as Light on Blackberry在黑莓上打开闪光灯作为灯光
【发布时间】:2010-11-23 08:09:06
【问题描述】:

我是 BlackBerry 应用程序开发的新手,我正在尝试制作一个简单的应用程序来打开我的手电筒作为手电筒。我知道已经有几个应用程序可以做到这一点,但我想尝试自己做。

我已经安装了 eclipse 和所有必要的插件来运行我的开发环境。我还成功地创建了股票标准 hello world 应用程序。

然而,我正在努力寻找如何做到这一点。我一直在阅读 API 文档并开始使用 FlashControlVideoControlSnapshotControl
然而,这些似乎并没有公开执行此操作的方法。

我知道通过摄像机我可以转到选项并打开闪光灯,这正是我想要模仿的。

到目前为止我使用的似乎只是将相机闪光灯设置为强制开启的代码是:

Player p = javax.microedition.media.Manager.createPlayer("capture://video");
p.realize();
p.start();

FlashControl flashControl = (FlashControl) p.getControl("javax.microedition.amms.control.camera.FlashControl");
flashControl.setMode(FlashControl.FORCE);

【问题讨论】:

    标签: blackberry java-me blackberry-jde


    【解决方案1】:

    闪光灯控制相关的问题我已经解决了

    根据我在我最近的应用程序上使用闪光灯控制

    相机。

    这是我使用的代码:

    public Camera(int j) 
    {
        k = j;
        try 
        {
            Player player = Manager.createPlayer("capture://video");
            player.realize();
    
            _videoControl = (VideoControl) player.getControl("VideoControl");
            flashControl = new FlashControl() 
            {
                public void setMode(int mode) 
                {
                    // TODO Auto-generated method stub
                }
    
                public boolean isFlashReady() 
                {
                    // TODO Auto-generated method stub
                    return false;
                }
    
                public int[] getSupportedModes() 
                {
                    // TODO Auto-generated method stub
                    return null;
                }
    
                public int getMode() 
                {
                    // TODO Auto-generated method stub
                    return 0;
                }
            };
            flashControl = (FlashControl) player
                    .getControl("javax.microedition.amms.control.camera.FlashControl");
    
            try {
    
                if (k == 1) 
                {
                    flashControl.setMode(FlashControl.AUTO);
                    Dialog.alert("slect Auto");
                } 
                else if (k == 2) 
                {
                    flashControl.setMode(FlashControl.OFF);
                    Dialog.alert("slect No");
                }
            } 
            catch (Exception e) 
            {
                System.out.println(e);
            }
    
            if (_videoControl != null) 
            {
                _videoField = (Field) _videoControl.initDisplayMode(
                        VideoControl.USE_GUI_PRIMITIVE,
                        "net.rim.device.api.ui.Field");
    
                // _videoControl.setDisplaySize(330, 420);
                // _videoControl.setDisplayLocation(getContentWidth(),
                // getContentHeight());
    
                _videoControl.setVisible(true);
    
                add(_videoField);
    
                capture = new ButtonField("Capture", Field.FIELD_HCENTER);
                capture.setChangeListener(this);
    
                add(capture);
                player.start();
    
            }
        } 
        catch (Exception e) 
        {
            System.out.println(e);
        }
    }
    

    这个逻辑已经和我的同事 Pinkesh 同时实现了

    在公司

    【讨论】:

    • 我给你 +50 以改善答案
    • 你为什么用一个虚拟对象初始化flashControl
    【解决方案2】:

    OS 5.0 中提供的FlashControl 类允许您打开闪存。只需使用 FORCE 标志在您的播放器上设置闪光控制:

    FlashControl flash = (FlashControl)player.getControl("javax.microedition.amms.control.camera.FlashControl");
    if(flash!=null) {
        try {
            flash.setMode(FlashControl.FORCE);
        } catch(IllegalArgumentException iae){}         
    }
    

    为此,您可能需要打开播放器来录制视频或拍照。为简洁起见,我没有在我的代码中显示这一点,但here 你可以阅读教程。如果您的应用只是打开闪光灯,您可能希望隐藏视频字段。

    【讨论】:

    • 我可以在播放器已经启动时调用flash.setMode(FlashControl.FORCE)(我的意思是Player.start() 已经调用)吗?
    • 是的(刚刚检查了我前段时间做的一个测试项目)。
    • you'd probably like to have the video field hidden 我该怎么做?
    • 要么在其顶部放置一个字段,在绝对位置(如here 所述),要么将其推到屏幕外,或直接在其顶部绘制。
    • @CAMOBAP,不幸的是,我认为这些解决方案中的任何一个都不起作用(将字段放在顶部,或使用AbsoluteFieldManager)。我认为VideoControl 足够聪明,可以知道它何时被实例化,但实际上并不可见,并且会关闭闪光灯(即使设置了FlashControl.FORCE)。
    【解决方案3】:

    试试这样的

    LED.setState(LED.STATE_ON);     // for LED
    Backlight.enable(true);         // for Screen
    this.setMode(FlashControl.ON);  // for flash light.
    

    或者导入这个包

    package lsphone.flash.microfireps;
    

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 2013-02-27
      • 2011-03-12
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多