How to get the lat-long using an external GPS

==Introduction==

Location based services are one of the most attractive and effective field. When talking about location based services(LBS) the first two parameters on which our application depend are latitude and longitude. In location based services the main aim is to get the location of the user and then use it for different applications.
This code snippet will help in achieving this basic task of getting lat/long using a external GPS(Global Positioning Device) device. The GPS will be connected to your Mobile through Bluetooth.

==Code Snippet==
<code python>
import socket

address, services = socket.bt_discover() # search for the GPS device
print “Discovered: %s, %s” % (address, services) #will print the name of the device
target = (address, services.values()[0]) #selecting

conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM)
conn.connect(target)
to_gps = conn.makefile(”r”, 0)

while True: msg = to_gps.readline() if msg.startswith(”$GPGGA”): #search for $GGPGA gps_data = msg.split(”,”) #detects the comma lat = gps_data[2] #get the latitude lon = gps_data[4] #get the longitude break

to_gps.close()
conn.close()
print “You are now at latitude %s and longitude %s” % (lat, lon)

</code>
== Explanation==

The code above will get you the exact position in form of latitude and longitude. But the important thing is that through the external GPS device we will get the data which follos a standard defined by the ”’National Marine Electronics Association(NMEA)”’.
The data are called NMEA sentences and are something like shown below: ”’$GGPGA,321123,1234,567,N,1131,101,E,2,88,0.9,555.45,M,47.9M,*47”’
The GPS sends something like shown above and it send one message per line. The single line contains many fields separated by a comma(,). The above line is GGPGA line and contains 15 fields the one from 3rd to 6th is of our important as it contains latitude and longitude information so using the code we read only that and get the location information.
Except the GGPGA line there are many other lines which are described in the NMEA sentences and they provide lots and lots of good information.

==Helpful Links==
[http://wiki.forum.nokia.com/index.php/NMEA_%28GPS%29_Location_Viewer NMEA location Viewer]

[http://www.gpsinformation.org GPS Information]

How to use pyKeyLock in PyS60

PyKeyLock extension can be used to lock and unlock the keypad of the device using [[PyS60]].

It is also capable of determining the status of the Keypad : Locked (1) or unlocked (2)

Below is a code snippet for using PyKeyLock.
<code python>
import pykeylock

#enable keylock without showing a notification
print pykeylock.Lock()

#disable keylock without showing a notification
print pykeylock.Unlock()

#enable keylock and show a notification
print pykeylock.Lock_WithNote()

#disable keylock and show a notification
print pykeylock.Unlock_WithNote()

#keylock status, 1 - locked, 0 - not locked
print pykeylock.LockStatus()

#Version
print pykeylock.about()
</code>

”’Links :”’
[http://fastiv.pp.net.ua/pyKeyLock_3rd_1_0.zip PyKeyLock Download] for 3rd Edition

[http://nizam.wen.su/Python/Modul_pack120.sis PyKeyLock Download] for 2nd Edition

L10n: Application attributes

__NOTOC__
__NOEDITSECTION__

{|style=”background:#eceff2″ width=”660px” border=”1″ cellpadding=”5″ cellspacing=”0″
|-
|”’ID”’ || &nbsp;
|”’Creation date”’ || Aug 27, 2008
|-
|”’Platform”’ || S60 3rd Edition, FP1
|”’Tested on devices”’ || Nokia N95 8GB
|-
|”’Category”’ || Java ME
|”’Subcategory”’ || Localization
|}

{|style=”background:#eceff2″ width=”660px” border=”1″ cellpadding=”5″ cellspacing=”0″
|-
|”’Keywords (APIs, classes, methods, functions):”’ java.lang.System, javax.microedition.midlet.MIDlet, java.lang.System.getProperty(), javax.microedition.midlet.MIDlet.getAppProperty()
|}

==Overview==

This code snippet is one of the series of snippets that demonstrate how to implement multi-language applications in Java ME. There are several techniques for localizing a MIDlet:

* Using application attributes
* Using text files
* Using resource bundles

This snippet describes the first technique: Using application attributes.

Generally speaking, application attributes (or MIDlet attributes, or system properties) are key-value pairs that represent information about the MIDP application. Attributes can be specified in the application descriptor file (<tt>.jad</tt>), in the manifest file (<tt>manifest.mf</tt>), or both. There are specific rules about how the attributes are located and how possible overlappings are resolved, but they are outside of the scope of this code snippet. See the “See also” section for more information.

In the technique presented in this snippet, the attributes related to localization are specified in the JAD file. This gives us the benefit of easy addition of languages, since no coding is required. On top of that, it is possible to create separate JAD files for different locales, in which case the application provider can allow the user to download only the file the user is interested in. On the other hand, this approach may not be useful for large amount of resources, because reading of large JAD files may cause performance issues. It is also noteworthy that JAD files address only string resources.

==The JAD file==

<code>
exit-en: Exit
exit-fr: Quitter
localeLbl-en: Locale
localeLbl-fr: Locale
text-en: Here’s some text.
text-fr: Voici du texte.
textLbl-en: Text
textLbl-fr: Texte
title-en: Localization example
</code>

”’Note”’: In the JAD file above, the French title (<tt>title-fr</tt>) is omitted to demonstrate the usage of default values when retrieving the attributes. See the <tt>localize()</tt> method for implementation details.

==Source==

<code java>
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;
</code>

<code java>
public class L10nMIDlet extends MIDlet implements CommandListener { private Form mainForm; private Command exitCommand; private String locale;
/** * Constructor. Constructs the object and initializes displayables. */ public L10nMIDlet() { // Obtain the system locale locale = System.getProperty(”microedition.locale”);
initUI(); } public void initUI() { // Initialize the form mainForm = new Form(localize(”title”, “Localization example”)); // Display the locale StringItem localeItem = new StringItem(localize(”localeLbl”, “Locale”), locale); mainForm.append(localeItem); // Display a localized text string StringItem textItem = new StringItem(localize(”textLbl”, “Text”), localize(”text”, “Here’s some text.”)); mainForm.append(textItem); // Create the exit command exitCommand = new Command(localize(”exit”, “Exit”), Command.EXIT, 1); mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); }
/** * Localizes a string. * @param key the key used for identifying a specific value in the * application descriptor file * @param def the default value in case “key” is not found from the * application descriptor file * @return the message localized; “def” if the key is not found */ private String localize(String key, String def) { // Append the current locale to the specified key and use the produced // string to obtain the property from the application descriptor file String value = getAppProperty(key + “-” + locale); if (value == null) { value = def; } return value; } /** * From MIDlet. * Called when the MIDlet is started. */ public void startApp() { // The initial display is the first form Display.getDisplay(this).setCurrent(mainForm); }
/** * From MIDlet. * Called to signal the MIDlet to enter the Paused state. */ public void pauseApp() { // No implementation required }
/** * From MIDlet. * Called to signal the MIDlet to terminate. * @param unconditional whether the MIDlet has to be unconditionally * terminated */ public void destroyApp(boolean unconditional) { // No implementation required }
/** * From CommandListener. * Called by the system to indicate that a command has been invoked on a * particular displayable. * @param command the command that was invoked * @param displayable the displayable where the command was invoked */ public void commandAction(Command command, Displayable displayable) { if (command == exitCommand) { // Exit the MIDlet notifyDestroyed(); } }
}
</code>

==Postconditions==

A MIDlet is localized using application attributes.

==See also==

* [http://developers.sun.com/mobility/midp/ttips/getAppProperty/index.html|Retrieving MIDlet attributes]
* [[L10n: Text files]]
* [[L10n: Resource bundles]]

L10n: Text files

__NOTOC__
__NOEDITSECTION__

{|style=”background:#eceff2″ width=”660px” border=”1″ cellpadding=”5″ cellspacing=”0″
|-
|”’ID”’ || &nbsp;
|”’Creation date”’ || Aug 27, 2008
|-
|”’Platform”’ || S60 3rd Edition, FP1
|”’Tested on devices”’ || Nokia N95 8GB
|-
|”’Category”’ || Java ME
|”’Subcategory”’ || Localization
|}

{|style=”background:#eceff2″ width=”660px” border=”1″ cellpadding=”5″ cellspacing=”0″
|-
|”’Keywords (APIs, classes, methods, functions):”’ java.lang.System, java.io.InputStreamReader, java.lang.StringBuffer, java.io.IOException, java.lang.Class, java.lang.System.getProperty(), java.io.InputStreamReader.read(), java.lang.StringBuffer.append(), java.lang.Class.getResourceAsStream(), java.io.InputStreamReader.close()
|}

==Overview==

This code snippet is one of the series of snippets that demonstrate how to implement multi-language applications in Java ME. There are several techniques for localizing a MIDlet:

* Using application attributes
* Using text files
* Using resource bundles

This snippet describes the second technique: Using text files.

In the technique presented in this snippet, localized strings are stored in text files. This gives us the benefit of easy addition of languages, since no coding is required. However, the developer needs to write his or her own stream parser in order to process the text files. Also, the string resources need to be loaded and held in an internal data structure as long as they’re used. Loading of strings also increases the startup time. It is also noteworthy that text files address only string resources.

==Text file: strings-en.txt==

<code>
title|Localization example
exit|Exit
localeLbl|Locale
textLbl|Text
text|Here’s some text.
</code>

==Text file: strings-fr.txt==

<code>
exit|Quitter
localeLbl|Locale
textLbl|Texte
text|Voici du texte.
</code>

”’Note”’: In the French text file (<tt>strings-fr.txt</tt>), the title is omitted to demonstrate the usage of default values when retrieving the resources. See the <tt>localize()</tt> method for implementation details.

==Source==

<code java>
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Hashtable;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;
</code>

<code java>
public class L10nMIDlet extends MIDlet implements CommandListener { private Form mainForm; private Command exitCommand; private Hashtable strings; private String locale; /** The character used for separating the key from the value. */ private static final char SEPARATOR_CHAR = ‘|’;
/** * Constructor. Constructs the object and initializes displayables. */ public L10nMIDlet() { // Obtain the system locale locale = System.getProperty(”microedition.locale”); String filename = “strings-” + locale + “.txt”; try { loadStrings(filename); } catch (IOException ex) { // TODO: Exception handling } catch (Exception ex) { // TODO: Exception handling }
initUI(); } /** * Stores the strings from the text file into a hash table as key-value * pairs. * @param filename * @throws java.lang.Exception */ private void loadStrings(final String filename) throws Exception { strings = new Hashtable(50); InputStreamReader reader = new InputStreamReader( getClass().getResourceAsStream(filename)); String line = null; // Read a single line from the file. null represents the EOF. while ((line = readLine(reader)) != null) { // Empty lines are ignored if (line.trim().equals(”")) { continue; } // Separate the key from the value and put the strings into the // hash table int separatorPos = line.indexOf(SEPARATOR_CHAR); if (separatorPos == -1) { throw new Exception(”Separator character not found.”); } String key = line.substring(0, separatorPos); String value = line.substring(separatorPos + 1); strings.put(key, value); } reader.close(); }
/** * Reads a single line using the specified reader. * @throws java.io.IOException if an exception occurs when reading the line */ private String readLine(InputStreamReader reader) throws IOException { // Test whether the end of file has been reached. If so, return null. int readChar = reader.read(); if (readChar == -1) { return null; } StringBuffer string = new StringBuffer(”"); // Read until end of file or new line while (readChar != -1 && readChar != ‘\n’) { // Append the read character to the string. Some operating systems // such as Microsoft Windows prepend newline character (’\n’) with // carriage return (’\r’). This is part of the newline character and // therefore an exception that should not be appended to the string. if (readChar != ‘\r’) { string.append((char)readChar); } // Read the next character readChar = reader.read(); } return string.toString(); }
public void initUI() { // Initialize the form mainForm = new Form(localize(”title”, “Localization example”)); // Display the locale StringItem localeItem = new StringItem(localize(”localeLbl”, “Locale”), locale); mainForm.append(localeItem); // Display a localized text string StringItem textItem = new StringItem(localize(”textLbl”, “Text”), localize(”text”, “Here’s some text.”)); mainForm.append(textItem); // Create the exit command exitCommand = new Command(localize(”exit”, “Exit”), Command.EXIT, 1); mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); }
/** * Localizes a string. * @param key the key used for identifying a specific value in the text * file * @param def the default value in case “key” is not found from the text * file * @return the message localized; “def” if the key is not found */ private String localize(String key, String def) { // Obtain the localized string from String value = (String)strings.get(key); if (value == null) { value = def; } return value; } /** * From MIDlet. * Called when the MIDlet is started. */ public void startApp() { // The initial display is the first form Display.getDisplay(this).setCurrent(mainForm); }
/** * From MIDlet. * Called to signal the MIDlet to enter the Paused state. */ public void pauseApp() { // No implementation required }
/** * From MIDlet. * Called to signal the MIDlet to terminate. * @param unconditional whether the MIDlet has to be unconditionally * terminated */ public void destroyApp(boolean unconditional) { // No implementation required }
/** * From CommandListener. * Called by the system to indicate that a command has been invoked on a * particular displayable. * @param command the command that was invoked * @param displayable the displayable where the command was invoked */ public void commandAction(Command command, Displayable displayable) { if (command == exitCommand) { // Exit the MIDlet notifyDestroyed(); } }
}
</code>

==Postconditions==

A MIDlet is localized using text files.

==See also==

* [[CS001006 - Reading a text file line by line]]
* [[L10n: Application attributes]]
* [[L10n: Resource bundles]]

L10n: Resource bundles

__NOTOC__
__NOEDITSECTION__

{|style=”background:#eceff2″ width=”660px” border=”1″ cellpadding=”5″ cellspacing=”0″
|-
|”’ID”’ || &nbsp;
|”’Creation date”’ || Aug 27, 2008
|-
|”’Platform”’ || S60 3rd Edition, FP1
|”’Tested on devices”’ || Nokia N95 8GB
|-
|”’Category”’ || Java ME
|”’Subcategory”’ || Localization
|}

{|style=”background:#eceff2″ width=”660px” border=”1″ cellpadding=”5″ cellspacing=”0″
|-
|”’Keywords (APIs, classes, methods, functions):”’ java.lang.StringBuffer, java.lang.Class, java.lang.RuntimeException, java.lang.StringBuffer.append(), java.lang.Class.forName()
|}

==Overview==

This code snippet is one of the series of snippets that demonstrate how to implement multi-language applications in Java ME. There are several techniques for localizing a MIDlet:

* Using application attributes
* Using text files
* Using resource bundles

This snippet describes the third technique: Using resource bundles.

Simply put, this technique uses Java classes for storing the localized resources. Every such class extends the <tt>ResourceBundle</tt> class, which handles searching of the specified resource for the particular locale. Each bundle (a class that extends the <tt>ResourceBundle</tt> class) also has a parent bundle from which a resource is searched in case it is not found from the bundle itself. This mechanism can be referred to as the parent chain of bundles.

Even though the localized resources are strings in this snippet, this technique applies to all kinds of resources, not just strings - unlike the other two techniques. Another benefit of using resource bundles is that there is no need for file handling. On the other hand, resource bundles may be difficult to utilize for non-technical translators, since localizable resources are mixed with code. Resource bundles also require more storage space and memory on the device than for example text files.

==Source: ResourceBundle.java==

<code java>
import java.util.Vector;

public abstract class ResourceBundle { protected ResourceBundle parent; /** * Returns a resource bundle using the specified base name and target * locale. */ public static ResourceBundle getBundle(String baseName, Locale targetLocale) { ResourceBundle parentBundle = null; ResourceBundle bundle = null; // Get a list of candidate locales for which resource bundles are // searched Vector candidateLocales = getCandidateLocales(targetLocale); // Go through every candidate locale and try to instantiate a // ResourceBundle using the base name and the candidate locale for (int i = candidateLocales.size() - 1; i >= 0; i–) { Locale locale = (Locale)candidateLocales.elementAt(i); // Bundle name consists of the base name plus an underscore and // locale if there is a locale. Otherwise, it will consist only of // the base name. String bundleName = baseName + ((locale.toString().equals(”")) ? “” : (”_” + locale)); try { // Try to instantiate a resource bundle using the name // constructed above Class bundleClass = Class.forName(bundleName); bundle = (ResourceBundle)bundleClass.newInstance(); // Set the parent bundle for this bundle. For the base bundle // (the one with the root locale, Locale.ROOT), the parent is // null. bundle.setParent(parentBundle); parentBundle = bundle; } catch (Exception ex) { // No need to do anything, just continue to the next bundle } } // If bundle is null even here, no resource bundle could be found. // This is an error situation. if (bundle == null) { throw new RuntimeException( “Can’t find resource bundle for base name ” + baseName + “.”); } return bundle; } /** * Returns a list of Locales as candidate locales used in bundle * instantiation. * @param locale the locale for which a resource bundle is desired */ private static Vector getCandidateLocales(Locale locale) { String language = locale.getLanguage(); String country = locale.getCountry(); Vector locales = new Vector(3); if (!country.equals(”")) { locales.addElement(locale); } if (!language.equals(”")) { locales.addElement( (locales.size() == 0) ? locale : new Locale(language, “”)); } locales.addElement(Locale.ROOT); return locales; } protected void setParent(ResourceBundle parent) { this.parent = parent; } public final String getString(String key) { String string = handleGetString(key); if (string == null) { if (parent != null) { string = parent.getString(key); } if (string == null) { throw new RuntimeException(”Can’t find resource for bundle ” + this.getClass().getName() + ” and key ” + key + “.”); } } return string; } /** * Gets a string for the given key from this resource bundle. Returns null * if this resource bundle does not contain a string for the given key. */ protected abstract String handleGetString(String key);
}
</code>

==Source: Resources.java==

<code java>
import java.util.Hashtable;

/** * Default resource bundle (English / United States). */
public class Resources extends ResourceBundle { private Hashtable strings; public Resources() { strings = new Hashtable(30); strings.put(”title”, “Localization example”); strings.put(”exit”, “Exit”); strings.put(”localeLbl”, “Locale”); strings.put(”textLbl”, “Text”); strings.put(”text”, “Here’s some text.”); } public String handleGetString(String key) { return (String)strings.get(key); }
}
</code>

==Source: Resources_fr.java==

<code java>
import java.util.Hashtable;

/** * Resource bundle for French, no specific country. */
public class Resources_fr extends Resources { private Hashtable strings; public Resources_fr() { strings = new Hashtable(30); strings.put(”exit”, “Quitter”); strings.put(”textLbl”, “Texte”); strings.put(”text”, “Voici du texte.”); } public String handleGetString(String key) { return (String)strings.get(key); }
}
</code>

”’Note”’: In the resource bundle above, the French title is omitted to demonstrate the parent chain of bundles when retrieving the resources. In other words, the title is searched from the superclass (<tt>Resources</tt>), because it cannot be found from the class above (<tt>Resources_fr</tt>). Note also that because of the parent chain mechanism, you don’t need to supply a value if the parent bundle handles the same key with the same value. This is the case with the <tt>localeLbl</tt> key above.

==Source: Locale.java==

<code java>
public class Locale { public static final Locale ROOT = new Locale(”", “”); private String language; private String country; private static Locale defaultLocale; /** * Constructs a locale using the specified language and country. */ public Locale(String language, String country) { this.language = language; this.country = country; defaultLocale = null; }
/** * Constructs a locale by parsing the language and country from the given * string. */ public Locale(String locale) { defaultLocale = null; // Locale en_US will do if the given locale is invalid if (locale == null) { language = “en”; country = “US”; return; } language = locale; country = “”; // Some devices separate locale components (language and country) from // each other by a hyphen instead of an underscore. Let’s convert every // hyphen into an underscore for consistency. locale = locale.replace(’-', ‘_’); int separatorPos = locale.indexOf(’_'); if (separatorPos != -1) { language = locale.substring(0, separatorPos); locale = locale.substring(separatorPos + 1); separatorPos = locale.indexOf(’_'); if (separatorPos != -1) { country = locale.substring(0, separatorPos); } else { country = locale; } } } public String getLanguage() { return language; } public String getCountry() { return country; } public static Locale getDefault() { if (defaultLocale == null) { defaultLocale = new Locale(System.getProperty( “microedition.locale”)); } return defaultLocale; } /** * Returns this locale as a string representation, with the language and * country separated by underscores. * Examples: “en”, “de_CH”, “_US” */ public String toString() { if (language.equals(”") && country.equals(”")) { return “”; } StringBuffer localeString = new StringBuffer(”"); if (!country.equals(”")) { localeString.append(language).append(”_”).append(country); } else if (!language.equals(”")) { localeString.append(language); } return localeString.toString(); }
}
</code>

==Source: L10nMIDlet.java==

<code java>
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;
</code>

<code java>
public class L10nMIDlet extends MIDlet implements CommandListener { private Form mainForm; private Command exitCommand; private Locale locale; private ResourceBundle resources;
/** * Constructor. Constructs the object and initializes displayables. */ public L10nMIDlet() { // Obtain the system locale locale = Locale.getDefault(); resources = ResourceBundle.getBundle(”Resources”, locale);
initUI(); } public void initUI() { // Initialize the form mainForm = new Form(resources.getString(”title”)); // Display the locale StringItem localeItem = new StringItem(resources.getString(”localeLbl”), locale.toString()); mainForm.append(localeItem); // Display a localized text string StringItem textItem = new StringItem(resources.getString(”textLbl”), resources.getString(”text”)); mainForm.append(textItem); // Create the exit command exitCommand = new Command(resources.getString(”exit”), Command.EXIT, 1); mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); }
/** * From MIDlet. * Called when the MIDlet is started. */ public void startApp() { // The initial display is the first form Display.getDisplay(this).setCurrent(mainForm); }
/** * From MIDlet. * Called to signal the MIDlet to enter the Paused state. */ public void pauseApp() { // No implementation required }
/** * From MIDlet. * Called to signal the MIDlet to terminate. * @param unconditional whether the MIDlet has to be unconditionally * terminated */ public void destroyApp(boolean unconditional) { // No implementation required }
/** * From CommandListener. * Called by the system to indicate that a command has been invoked on a * particular displayable. * @param command the command that was invoked * @param displayable the displayable where the command was invoked */ public void commandAction(Command command, Displayable displayable) { if (command == exitCommand) { // Exit the MIDlet notifyDestroyed(); } }
}
</code>

==Postconditions==

A MIDlet is localized using resource bundles.

==See also==

* [http://java.sun.com/javase/6/docs/api/java/util/ResourceBundle.html ResourceBundle class] in the Java SE 6 API specification.
* [[L10n: Application attributes]]
* [[L10n: Text files]]

MediaFLO USA adds live news coverage from CNBC, MSNBC and FOX News to its mobile TV offering

MediaFLO USA has announced the expansion of its news coverage to include three new 24/7 news channels to its mobile TV service: CNBC, MSNBC, and FOX News. The new channels will be available to both AT&T and Verizon Wireless mobile TV subscribers and will launch in time for the political party convention season.
All three channels […]

CBS Sports Mobile announces mobile app, revamped website and a rich-media alerts service

CBS Sports Mobile has launched a new application, announced plans for a redesigned and improved mobile website and is offering a free mobile rich-media fantasy alerts service.
The CBS Sports Mobile Ultimate Sports Application provides everything for the ultimate sports fan on-the-go, with live scores, stats, headlines, streaming videos, and complete control of CBSSports.com fantasy teams. […]

HTC Touch Diamond receives EISA’s European Smartphone 2008-2009 award

It’s not just Samsung which has a reason to celebrate for receiving EISA’s award for its ultra-cool G810 cameraphone. The European Imaging and Sound Association awarded the HTC Touch Diamond with the “European Smartphone 2008-2009″ title.
EISA said that the HTC Touch Diamond was elevated above the competition by setting a new standard for integrating advanced […]

HTC S740 - Touch Diamond without a touch

HTC today announced a new smartphone - S740. The new device packs everything the Touch Diamond has except for the touch — Windows Mobile 6.1 Standard rather than Professional edition is used. It also dumps VGA screen for QVGA, but adds 12-key numeric keypad on top of the slide-out QWERTY Keyboard.
The HTC S740 specifications:

Networks: WCDMA/HSDPA: […]

HTC Dream G1 scale mockup reveals design

And the HTC Dream leaks keep on coming. Not that we mind, or anything.
Following on the recent publication of the HTC Dream’s length and width dimensions, courtesy of the FCC, a newly leaked scale wire-frame mockup of the HTC Dream gives us a glimpse of what to expect when the HTC Dream G1 launches in […]

Pages (1974): « 1 2 [3] 4 5 6 » ... Last »
edwan