Wednesday, July 28, 2010

InvalidJadException: Reason = 22 emulator doesn't start in J2Me

I got the problem in Netbeans 6.8.When a Midlet is copied without creating,the problem occurs InvalidJadException.If you are facing the same exception the following may help you.

Do the following and remove the exception.
  1. Go to nbproject folder in your project.Under this folder find "project.properties" file.
  2. Edit "project.properties" file.Search for "manifest.midlets="
  3. Set the value of "manifest.midlets=MIDlet-1: MidletName, , PackageName\n"
For my project i set the value to
manifest.midlets=MIDlet-1: SampleMidlet, , com.j2me.mobile.sample.SampleMidlet\n

Spaces are compulsory.Place the space after : and before packagename.
If you are using notepad use \n at end .

References:

http://tecknolojia.blogspot.com/2008/03/invalidjadexception-in-netbeans.html

InvalidJadException: Reason = 22 emulator doesn't start in J2Me

When a project is copied without creating,the problem occurs InvalidJadException.

Do the following and remove the exception.
  1. Go to nbproject folder in your project.Under this folder find "project.properties" file.
  2. Edit "project.properties" file.Search for "manifest.midlets="
  3. Set the value of "manifest.midlets=MIDlet-1: MidletName, , PackageName\n"
For my project i set the value to
manifest.midlets=MIDlet-1: SampleMidlet, , com.j2me.mobile.sample.SampleMidlet\n

Spaces are compulsory.Place the space after : and before packagename.\n is to indicate to go to next line if you are editing in a notepad or editplus.

Tuesday, July 27, 2010

MIME Types supported by BlackBerry Devices

Inorder to know about the Mime Types supported by a simulator you are running,just pass null as parameter in the getSupportedcontentTypes as shown below..
String protocols[]=Manager.getSupportedContentTypes(null);
System.out.println("the supported typed are:");
   for(int i=0;i<protocols.length;i++){
       System.out.println(" "+protocols[i]);
   }


Friday, July 23, 2010

Managers in Blackberry

There are 5 Field mangers in 4.5 JDE and newly 3 Field managers added in 5.0 JDE .

[4.5 JDE]

DialogFieldManager,VerticalFieldManager,HorizontalfieldManager,screen and FlowFieldManager.
#1)DialogFieldManager:
DialogFieldManager is a manager in which the layout consists of an icon,message,Fields.The icon is on the top left side and the respective message is on the top right corner.Message is a RichTextField.The fields are added like a body for he DialogFieldManager.We have to add it to the screen inorder to display.

The following shows the layout.
------------------
| Icon Message |

| Field1 |
| Field2 |
| ....... |

-------------

Some of the methods are.....
setIcon(BitMap bitmap),setMessage(RichTextField rch)


#2)VerticalFieldManager

The VerticalFieldManager adds fields in a vertical order.We can add Fields and Managers to this VerticalfieldManager.This VerticalFieldManager can be scrollable.We can set that styles in Constructor.VerticalFieldManager can be added to screen.

VerticalFieldManager Layout
------------------
| Field1 |
| Field2 |
| Field3 |
| ........... |
------------------

#3)HorizontalFieldManager
The HorizontalFieldManager adds fields in a horizontal order.We can add Fields and Managers to this HorizontalFieldManager.This HorizontalFieldManagercan be scrollable.We can set that styles in Constructor.HorizontalFieldManagercan be added to screen.

HorizontalFieldManager Layout
----------------------
| Field1 Field2 Field 3 |
-----------------------

#4)FlowFieldManager

FlowFieldManager has a special type of property.It acts both like a vertical FieldManager and HorizontalManager.Firstly it acts fields in horizontal way.If the field exceeds the screen length next fields are added in next row.That is it adds the fields in flow.

FlowFieldManager Layout
------------------
| Field1 Field2 |
| Field3 Field4 |
| Field3 .......... |
| ...................... |
------------------
#5)Screen:

The concept of screen is different to other Managers.Base class for all screens. Each UIEngine presents an interface to the user by pushing screens onto its display stack, and popping them off when interaction with the managed fields on that screen is finished.Screen is an abstract class.
The sub classes of Screen are:
PopupScreen and FullScreen.
Constructors o f screen contains a DelegateManager as argument.We have to send aManager inorder to invoke his abstract Class.

#a) PopupScreen:
PopupScreen is a screen which appears like a popup as mentioned in name itself.PopupScreen is pushed on to the screen and it appears continuously until it is poppedup functionally.By default it is not popped up by pressing any keys.If you want to customise your popupScreen then go for PopUpScreen.OtherWise there are some subclasses for popupscreen which provide som regularily used functionality like Info,Alert,status.
SubClasses of PopUpScreen are :
Dialog,Status.

Dialog:
Dialog is a subclass of popuspscreen.Unlike all other screens Dialog can be pushed automatically without using UIApplication.PushScreen(Scren).Dialog are of two types.Alert,Inform.We can directly call Dialog.Alert(String) and Dialog.inform(message) which will automaticaly pops a popup having Ok and Cancel buttons for Alert and Ok button for inform.The icon also changes for both of them.If you want to customise a Dialog and you want to push the Dialog manually,go for the Constructor and push Dialog using PushScreen(Screen).
We are having several Styles such as CANCEL,D_DELETE,D_OK,D_OK_CANCEL,D_SAVE,D_YES_NO etc....which can be used in our dialog by applying these styles in constructor.

Status:

Status has same functionality as Dialog but diffeence is it doesnt have any buttons.We can keep a time limit for the status.If we press space or esc it will disappear.


#B)FullScreen:
A screen that contains a single, vertical field manager.It is a subclass of Screen.Is has a subClass MainScreen which is widely used screen.

MainScreen:
SubClass of FullScreen.Main screen objects contain a title section, a separator element, and a main scrollable section.We can add Managers and fields to it .Than push this Screen.
Methods:
mainScreen.add(Field field);
mainScreen.addMenuItem(MenuItem menuItem);

There are few other Managers which are added in
JDE 5.0.
they are BrowserField,AbsoluteFieldManager and GridFieldManager.

[27/07/10]
#1)BrowserField:

Upto Jde 5.0 if you want to hit an url or a web page ,the process is to hit browser which is an external application.Now by using BrowserField we can embed the browser within the java application.No need to call an external application.The process to initialise this browserfield involves three steps.They are:
  • Instantiate Browser Field
     BrowserField browserField = new BrowserField();
  • Add browserField to UiManager or Screen
     screen.add( browserField );
  • Request the content to display.This method call is done only once.
     browserField.requestContent( "http://blackberry.com" );
There are are 2 constructors for BrowserField.
  1. BrowserField()
  2. BrowserField(BrowserFieldConfig config)
Some methods involve back(),forward(),refresh() etc...

#2)GridFieldManager:
GridFieldManager is introduced in Blackberrry JDE 5.0.GridFieldManager is having fixed number of rows and columns.We can insert an element in a specific row and column using insert() or if you use add() method the fields are added like a FlowFieldManager one after other(First horizontally and then cumming to next row).

Row and column heights and widths may be specified as fixed sizes or may be automatically sized with the available space divided evenly among the rows and columns.

The grid will scroll vertically if the heights of the rows exceeds the visible height of the grid, and will scroll horizontally if the widths of the columns exceedst he visible width of the grid.

There is only one constructor

GridFieldManager(int rows,int columns,long style);

#3)AbsoluteFieldManager:

This is not having a JavaDoc upto now.No reference available for AbsoluteFieldManager as per my knowledge.If there is reference please comment me the link.



Reference:

http://www.blackberry.com/developers/docs/4.5.0api/index.html

http://www.blackberry.com/developers/docs/5.0.0api/





Friday, July 16, 2010

Get default currency value from BB device

If you are looking to get the default currency from your code you have to go for
RadioInfo.getMCC(RadioInfo.getCurrentNetworkIndex()).

Mcc means the Mobile country code.

public String setCurrency()
{
String currency="$";//default currency symbol
String array[]={"€","$","Rs","BZ$","£","R$",
"₪","R","¥","₩","руб","CHF"};
//all Character is in UTF-8. and copy from the http://www.xe.com/symbols.php
String euro[]={"225","204","278","270","222",
"208","206","202","272","293","214"};//MCC for the country which used euro sign
String pound[]={"417","248","602","348","274","266","415"
,"360"}; //MCC for the country which used pound sign
int li_Radio = RadioInfo.getMCC(RadioInfo.getCurrentNetworkIndex());
String x = Integer.toHexString(li_Radio);//MCC for country.
boolean flag=false;
for(int i=0;i<euro.length;i++)
{if(x.equals(euro[i])){flag=true;
currency=array[0];//set Euro currency symbol
break;
}}
if(flag==false){
for(int i=0;i<pound.length;i++){
if(x.equals(pound[i])){
flag=true;
currency=array[4];//set Euro currency symbol
break;
}}}
if(flag==false){
if(x.equals("724")){
currency=array[3];//set Brazil currency symbol.
}else if(x.equals("425")){
currency=array[6];//set Israel currency symbol.
}else if(x.equals("655")){
currency=array[7];//set SountAfria currency symbol.
}else if(x.equals("467")||x.equals("450")){
currency=array[9];//set Koria currency symbol.
}else if(x.equals("441")||x.equals("460")){
currency=array[8];//set China or Japan currency symbol.
}else if(x.equals("413") || x.equals("404") || x.equals("405") || x.equals("410") || x.equals("429")){
currency=array[2];//set India or Nepal or Pakistan or Srilanka currency symbol.
}else if(x.equals("250")){
currency=array[10];//set Russian currency symbol.
}else if(x.equals("228")){
currency=array[11];//set Switzerland currency symbol.
}}
return currency;
}

First go to project property and click Text File Encoding checkbox to other and set encoding to UTF-8.

This code work on real device not in simulator.Set currency according to MCC and check current mobile network.


#2)Another method if you are not having a network carrier and you are using wi-fi

This code is set to currency symbols according to phone language setting.

public static String setCurrency()
{
String currency="$";//set $ as a default currency.
String array[]={"$","£","€"};
String x = Locale.getDefaultForSystem().toString();//MCC
if(x.equalsIgnoreCase("fr")){
currency=array[2];//set € symbol.
}else if(x.equalsIgnoreCase("es")){
currency=array[2]; //set € symbol.
}else if(x.equalsIgnoreCase("en_us")){
currency=array[0];//set $ symbol.
}else if(x.equalsIgnoreCase("en_gb")){
currency=array[1];//set £ symbol.}
return currency;
}

By the above method we can get through the languages which are supported by the device.

reference:

http://supportforums.blackberry.com/t5/Java-Development/how-to-get-default-currency-value-from-BB-device/td-p/510638





Wednesday, July 14, 2010

small issues great impact---My basic learnings Blackberry

In developing a blackberry app we frequently go trough Paint,PreferredWidth (),etc...

#1)In a Manager or a Field there will be a default Height and width.This is obtained by using getPreferredWidth().If the height or width exceeds the preferred width then the width and height is obtained by using getHeight() and getWidth().So,if you want to use the width of a Field then it is better to go for

Math.max(field.getPreferredWidth(),field.getWidth());


#2)In paint method,
If you want to draw a background type of thing,do required coding before Super.Paint(graphics),else if you want to draw a text type of thing do required type coding after Super.Paint(graphics).Super.Paint(graphics) will do the required painting defined in code(ex. for a horizontalFieldManager it will add the fields which are written in respective code.).

#3[14/07/10])If you are a Blackberry developer running and debugging costs you a lot.Better go for 8320 simulator running.it will take very less time when compared to other simulators.9700 takes a lot of time to load but the advantage is load once use number of times.unlike other simulators 9700 doesn't ask for restart if you delete the app(unless if there is an exception that too in some exceptions only).9700 is based on 5.0 JDE.when coming to 9000 simulator it allows deletion for one time.After second time deletion of same cod file it asks for restart.


Friday, July 9, 2010

online vedio streaming in Blackberry .

I'm trying to stream the video from internet directly.I tried it hardly in my application....the code is...
       
//BB Code
private void startPlayingVideo2(){
  try
  {
  Class playerDemoClass = Class.forName("VideoScreen");

  _player = javax.microedition.media.Manager.createPlayer("rtsp://stream.zoovision.com/Movies/vader_sessions.3gp");
 
  // Realize Player
  _player.realize();

  
  _player.addPlayerListener(this); // Add listener to catch Player events
  _player.setMediaTime(100000);
  
   _videoControl = (VideoControl) _player.getControl("VideoControl"); // Get the Player VideoControl

  // Initialize video display mode
  _videoField = (Field) _videoControl.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, "net.rim.device.api.ui.Field");

  // Set the video display size to 200 x 200

  // Create a manager for the video field
  _videoManager = new VideoManager();
  _videoManager.add(_videoField);
  add(_videoManager);

  // Set video control to visible
  _videoControl.setVisible(true);

  
  _player.prefetch(); //player has to prefetch before it is getting started
  _player.start();  // Start the Player

  // Set up Player volume
  setVolume(_currentVolume);
  }
  catch (Exception e)
  {
 
  }
}    


Connections should be fast for live straming.

I checked in device as well as simulator.It worked fine for me.9000 simulator only supported for online streaming and i checked in 8220 device also.
Youtube Videos from m.youtube.com didn't worked for me.Some links worked for me are

static video:
rtsp://stream.zoovision.com/Movies/vader_sessions.3gp

for live videostream:
rtsp://stream.zoovision.com/live.sdp

For live audio stream:


Have a nice day.....

Wednesday, July 7, 2010

OCAP,OCAPRI,Tru2Way,MHP,ETV,Java TV,CDC


OCAP
is a specification developed by cablelabs and public facing brand name is Tru2way.Before going to Tru2 way i have to discuss on MHP(Multimedia Home Platform).

MHP is a specification developed by DVB(digital video broadcasting) which is extensively used in Europe and some parts of Asia.The first origin for Tv applications is started by DVB.The Television that support these applications is known as interactive Television.These Applications are supported by Digital TV's(which implements digital signaling).

The applications developed are installed on set-top boxes.The set-top boxes of north america are different from rest of the world.Cable Labs started working on Interactive applications(Firstly started by DVB) which gave rise to OCAP(OpenCable Application Platform ).This spec is branded as Tru2Way.

OCAP can be shown as a stack for easy view.


Applications

----------------------------

OCAP API


JavaTv JFM MHP


CDC/FP/PBP

-------------------------------------

JVM



By now we can get an idea from the application perspective that OCAP is a collection of API's.

OCAP is based on MHP.It uses some of the elements in MHP.The first OCAP Spec is based on MHP version 1.0.0.Later on DVB released another specification Called Globally Executable MHP(GEM) to make it easier to use elements of MHP by other specifications.Later on OCAP is based on GEM.

Java TV describes set of concepts required for Dtv such as acessing serviece information,selecting new services and loading files form corousel.It is done in way that it is not tied to Dtv standards.JavaTv describes many of the concepts required for DTv platform.there are some elements missing.So,JavaTv is more a component rather than a middle ware software itself.OCAP uses JavaTv concepts for accessing service information,selecting new services and loading files form corousel etc.

JFM(Java Media Framework) ,an API for rendering Video and other Media.

CDC(Connected Device Configuration) It forms the base of a Java technology stack. It is intended for devices such as television set-top boxes, automobile computers, and other midsized computers.

FP(Foundation Profile) and Personal Basis Profile (PBP) round out CDC with additional APIs, including APIs for user interface and graphics.

OCAP RI(OpenCable Application Platform Reference Implementation) is the implementation for OCAP.The applications can be developed using OCAPRI.

In order to start with OCAP we have to go through some of technical terms.


  • Bound application: An application that is tied to a service in order to operate. When the user selects another service, then (in most cases) the application is terminated.
  • Unbound application: An application that is not tied to a specific channel and can run independent of any service. Unlike bound applications, an unbound application continues to run after the user navigates to other services.
  • MPEG-2 transport stream: The binary stream of data that delivers the audio, video, and interactive content to Tru2way-enabled devices (TVs, set-top boxes, and so on). The transport stream originates from the cable operator and terminates at the cable installation.
  • Return channel: A separate bidirectional data connection between the Tru2way-enabled device and the cable operator. All Tru2way-enabled devices include a cable modem that enables the device to have a high-bandwidth connection back to the cable operator.
  • Service: Conceptually, a service is a TV channel. However, a service is actually an integrated collection of audio, video, and program data that's presented together.

The main feature of these apps are two way communication between User and cable operator.

ETV is another specification in TV app dev.It aims at maximum set-top boxes.

The main differences between Tru2Way and Etv are
ETv applications are supported by legacy set-top boxes,where as Tru2Way applications don't.But the present Set-top boxes support Tru2Way apps and Etv applications may not provide user interactivity.
Tru2Way is having Superset functionality of Etv.So,the applications which are developed in Etv can be completely developed using Tru2Way.
For Bound applications Etv is best and for Unbound Applications tru2way is best.

Both have common "Write once deploy any where" concept.

ATSC have recently announced the Advanced Common Application Platform (ACAP). This is supposed to be a common basis for all interactive TV systems in the US, be they cable, satellite or terrestrial. This is also based on GEM, and adds some elements from OCAP that are appropriate for the US market.

Here are some references:

http://developers.sun.com/mobility/ocap/articles/intro/

http://www.interactivetvweb.org/tutorials/javatv

http://www.ibm.com/developerworks/java/library/j-ocap1/index.html?ca=drs-

http://www.ibm.com/developerworks/java/library/j-ocap3/index.html?ca=drs-

http://www.ibm.com/developerworks/java/library/j-ocap2/index.html?ca=drs-