Chetan Khilare
Chetan Khilare

Reputation: 305

Unable to open camera on samsung phone in j2me

I have written following piece of code. It is used to create camera player. I tested it on nokia phones. It's working fine and I am able to see camera and use its functionality.

But the issue is that when the code is tested on samsung phone it throws Media exception and eventually have to make an exit from the application. Due to this code, my inbuilt camera functionality (i.e. on samsung phone) also stops working. So what's the reason to it?

    public void startCamera()
{
    try
    {
        try 
        {
            // if player==null
            player = createPlayer();
        } 
        catch (Exception ex) 
        {
            ex.printStackTrace();
            ErrorDialog.show(ex, "We are exiting the application.",
                        "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                    public void actionPerformed() {
                        m_objMIDlet.exitApp();
                    }
            });
        }
        try 
        {
            player.realize(); 
            player.prefetch();
        }
        catch (MediaException ex) 
        {
            ex.printStackTrace();
            ErrorDialog.show(ex, "We are exiting the application.",
                        "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                    public void actionPerformed() {
                        m_objMIDlet.exitApp();
                    }
            });
        }




        //Grab the video control and set it to the current display.
        videoControl = (VideoControl)(player.getControl("VideoControl"));
        if (videoControl == null)
        {
            //discardPlayer();
            stopCamera();
            ErrorDialog.show("Unsupported:\n"+
                 "Can't get video control\n"+
                 "We are exiting the application.",
                    "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                public void actionPerformed() {
                    m_objMIDlet.exitApp();
                }
            });
        }

        mediaComponent = new MediaComponent(player);
        mediaComponent.setFocusable(false);
        m_cameraScreen.showCamera(mediaComponent);
        start();
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
        //discardPlayer();
        stopCamera();
        ErrorDialog.show("Sorry,Resources unavailable.\nWe are exiting the application.",
                        "Exit", new com.auric.qrev.scanqrcode.lwuit.ui.Action(){
                    public void actionPerformed() {
                        m_objMIDlet.exitApp();
                    }
        });
    }

}

    private Player createPlayer()throws MediaException, Exception 
{
    Player mPlayer = null;
    // try capture://image first for series 40 phones
    try 
    {
        mPlayer = Manager.createPlayer("capture://image");
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    catch (Error e) 
    {
        e.printStackTrace();
    }

    // if capture://image failed, try capture://video
    if (mPlayer == null) 
    {
        try 
        {
            mPlayer = Manager.createPlayer("capture://video");
        } 
        catch (Exception e)
        {
            e.printStackTrace();
            throw new MediaException("Sorry,Resources unavailable.");
        }
    }

    if(mPlayer == null)
        throw new Exception("Sorry,Resources unavailable.");

    return mPlayer;

}

Upvotes: 3

Views: 565

Answers (1)

michael aubert
michael aubert

Reputation: 6826

First things first, you have to realize that printStackTrace() is pretty much useless outside of the emulator unless you are using a Symbian phone.

You can also use java.lang.Throwable instead of separating Exception and Error

You can figure out exactly what happens by gathering information as a String and appending it to a simple lcdui Form while you are testing:


try {
    // do something that could potentially fail
} catch (Throwable th) {
    myDebugLcduiForm.append("potential failure number xx." + th + th.getMessage());
    // if necessary, throw a new RuntimeException
}

You might want to update/repost your question once you know exactly what line of code throws what exception.

Upvotes: 1

Related Questions