<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Pei Zheng's Mobile Computing Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/zhengpei/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/zhengpei/feed.xml</link>
    <description>Anything about mobile computing, computer system and networking technologies, new services, business models, and ideas.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:28:53 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Moving to zhengpei.wordpress.com</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/moving-to-zhengpei-wordpress-com</link>
      <pubDate>Thu, 26 May 2011 15:03:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2011/05/26/moving-to-zhengpei-wordpress-com/</guid>
      <description><![CDATA[As requested by Microsoft, I will stop using this blog as I am no longer with Microsoft. 
I will...]]></description>
      <content:encoded><![CDATA[<p>As requested by Microsoft, I will stop using this blog as I am no longer with Microsoft. </p>
<p>I will start to use my new blog at<a target="_blank" href="http://zhengpei.wordpress.com"> zhengpei.wordpress.com</a>. Please feel free to check it out. </p>]]></content:encoded>
    </item>
    <item>
      <title>"Save To My Skydrive" Come True</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/save-to-my-skydrive-come-true</link>
      <pubDate>Mon, 22 Nov 2010 19:05:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2010/11/22/save-to-my-skydrive-come-true/</guid>
      <description><![CDATA[More than two years ago, I wrote a blog post of my view on Cloud Computing, titled "Save To My...]]></description>
      <content:encoded><![CDATA[<p>More than two years ago, I wrote a blog post of <a target="_blank" href="http://blogs.msdn.com/b/zhengpei/archive/2008/08/02/save-to-my-skydrive.aspx">my view on Cloud Computing, titled "Save To My Skydrive"</a>. Back then both OfficeLive and Google Docs provided online Office applications and collaboration tools. But one thing missing in both offerings was the feature that allows one to easily save&nbsp;local docs to the cloud, by simply clicking "File"--&gt;"Save To Skydrive" in MS Office software. </p>
<p>Today, Google announced <a target="_blank" href="http://googleenterprise.blogspot.com/2010/11/bridge-to-cloud-google-cloud-connect.html">Google Cloud Connect for Microsoft Office</a>, &nbsp;a tool that enables local MS office files to sync to Google Docs.&nbsp; </p>
<p><strong>Update</strong>: Microsoft Office 2010 comes with Office Web Apps that allows file sharing and editing with Sharepoint or Skydrive. Windows Phone 7 has "Upload to Skydrive" for pictures and videos, and the Office OneNote app supports real-time sync with Skydrive. </p>
<p><img border="0" src="http://2.bp.blogspot.com/_7T3eYGdjqDU/TOqkLM85qEI/AAAAAAAAAGo/utEsH0IXMOE/s1600/GoogleCloudConnect.png" style="max-width: 550px;" /></p>
<p>This gives Google Docs a leverage over the office tools on your local computer. The idea could open the door for a plethora of cloud based scenarios that are more closely integrated with common applications on a local OS. Here are&nbsp;a couple of&nbsp;examples that we will see in the next couple of years:</p>
<ul>
<li><strong><span style="font-size: small;">"Sync To Cloud" on Mobile</span></strong>: On Android, if you open a file, you should be able to sync it to Google Docs or Skydrive; no need to save it to your crowed and unreliable SD card; Similar feature on Windows Phone;</li>
<li><strong><span style="font-size: small;">"Backup My Phone To Cloud": </span></strong>No need to use phone backup software. Phone OS should allow you to backup your phone state to the cloud, and restore whenever you want;<span></span></li>
<li><span style="font-size: small;"><strong>"Send File Using Cloud":</strong> </span>On PC or a phone, when you want to share a big file (video clips, many photos, an iso file, etc) with someone or some other device, you should be able to just do it without worrying about what transport will be used. Behind the scene the cloud system should be able to break the file into chunks, and leverage a <em>mobile grid</em> (peer to peer on transport layer) to distribute these pieces to the cloud and then assemble at the target.</li>
</ul>
<p>&nbsp;Essentially all the hassles with version control, data security, and limited storage on a local device or PC can be addressed by leveraging the cloud, as long as it is secure, reliable, and user-friendly. I expect to see more and more interesting cloud based user cases in the next couple of years. </p>]]></content:encoded>
    </item>
    <item>
      <title>Chromium Device Performance Evaluation</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/chromium-device-performance-evaluation</link>
      <pubDate>Wed, 03 Nov 2010 23:40:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2010/11/03/chromium-device-performance-evaluation/</guid>
      <description><![CDATA[It is widely known that Google is busy workign on a Chrome OS device, which is a netbook with...]]></description>
      <content:encoded><![CDATA[<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: small; font-family: Calibri;">It is widely known that Google is busy workign on a Chrome OS device, which is a netbook with everything in the Chrome browser. It remains to be seen how cool it is, as this is essentially the biggest thing from Google after the evidently successful Android effort (so far). </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal">&nbsp;</p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: small; font-family: Calibri;">Many people in the mobile device community is trying <a target="_blank" href="http://www.chromium.org/chromium-os">Chromium OS</a>, the open source version of the&nbsp;Google Chrome OS. So how do we evaluate the performance of such a device? This article aims at giving you some preliminary information on Chromium device performance benchmarking: what are being tested, and what tools are used for now. If you are interested, go put Chromium OS on a USB drive and try it out.</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal">&nbsp;</p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: small; font-family: Calibri;">Here is Chromium OS architecture, from top to bottom (source <a target="_blank" href="http://dev.chromium.org/chromium-os/chromiumos-design-docs/software-architecture">here</a>).</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="mso-fareast-language: ZH-CN; mso-no-proof: yes;"><a src="&quot;http://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/software-architecture/chrome.png?attredirects=0&quot;" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/&lt;img border=&quot;0&quot; src="></a></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="mso-fareast-language: ZH-CN; mso-no-proof: yes;"></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="mso-fareast-language: ZH-CN; mso-no-proof: yes;"></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/13/4336.chrome.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-74-13/4336.chrome.png" /></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/13/8780.system.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-74-13/8780.system.png" /></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal">&nbsp;</p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/13/8484.firmware.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-74-13/8484.firmware.png" /></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal">&nbsp;</p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: small; font-family: Calibri;">Performance benchmarking on Chromium OS devices are mostly falling into&nbsp;two categories:</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo1;" class="MsoListParagraph"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;"><span style="font-size: small;">&middot;</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: small; font-family: Calibri;">General Linux system benchmarking, using tools such as <b style="mso-bidi-font-weight: normal;"><a target="_blank" href="http://www.phoronix-test-suite.com/">Phoronix Test Suite</a></b>&nbsp;</span><span style="font-size: small; font-family: Calibri;">or <strong><a target="_blank" href="http://www.bitmover.com/lmbench/">lmbench</a></strong></span><span style="font-size: small; font-family: Calibri;">. </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo1;" class="MsoListParagraph"><span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;"><span style="font-size: small;">&middot;</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: small; font-family: Calibri;">Browser performance benchmarking in the following areas:</span></p>
<p style="margin: 0in 0in 0pt 1in; text-indent: -0.25in; mso-list: l0 level2 lfo1;" class="MsoListParagraph"><span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;"><span style="font-size: small;">o</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp; </span></span></span><span style="font-size: small; font-family: Calibri;">Javascript engine performance, using <b style="mso-bidi-font-weight: normal;"><a target="_blank" href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">Sun Spider</a></b></span><span style="font-size: small; font-family: Calibri;">;</span></p>
<p style="margin: 0in 0in 0pt 1in;" class="MsoListParagraph"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt 1in; text-indent: -0.25in; mso-list: l0 level2 lfo1;" class="MsoListParagraph"><span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;"><span style="font-size: small;">o</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp; </span></span></span><span style="font-size: small; font-family: Calibri;">DOM parsing performance, using <a target="_blank" href="http://dromaeo.com/">Dromaeo</a></span><span style="font-size: small; font-family: Calibri;">;</span></p>
<p style="margin: 0in 0in 0pt 1in;" class="MsoListParagraph"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt 1in; text-indent: -0.25in; mso-list: l0 level2 lfo1;" class="MsoListParagraph"><span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;"><span style="font-size: small;">o</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp; </span></span></span><span style="font-size: small; font-family: Calibri;">Hardware-accelerated graphics rendering performance, using <b style="mso-bidi-font-weight: normal;"><a target="_blank" href="http://www.craftymind.com/guimark2/">GUIMark2</a></b></span><span style="font-size: small; font-family: Calibri;">, <a target="_blank" href="http://ie.microsoft.com/testdrive/performance/psychedelicbrowsing/Default.html">Microsoft Psychedelic test</a></span><span style="font-size: small; font-family: Calibri;">, <span style="mso-spacerun: yes;">&nbsp;</span><a target="_blank" href="http://ie.microsoft.com/testdrive/Performance/MrPotatoGun/Default.html">Potato Gun</a>&nbsp;</span><span style="font-size: small; font-family: Calibri;"> or <a target="_blank" href="http://ie.microsoft.com/testdrive/Performance/FishIE%20tank/Default.html">Fish Tank</a></span><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt 1in; text-indent: -0.25in; mso-list: l0 level2 lfo1;" class="MsoListParagraph"><span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;"><span style="font-size: small;">o</span><span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp; </span></span></span><span style="font-size: small; font-family: Calibri;">HTML5 video performance; as of now there is no reliable way to do this as HTML5 video doesn&rsquo;t provide an api to catch frame dropping events, or a way to determine the playback fps, according to author of GUIMark2; </span></p>
<p style="margin: 0in 0in 0pt 0.5in;" class="MsoListParagraph"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: small; font-family: Calibri;">For browser HTML5 support validation, vendors use this site: </span><a target="_blank" href="http://html5test.com/"><span style="font-size: small; font-family: Times New Roman;">http://html5test.com/</span></a><span style="font-size: small; font-family: Calibri;">.</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: small; font-family: Calibri;">Latest Chrome browser canary build is 8.0.559.0 (</span><a target="_blank" href="http://tools.google.com/dlpage/chromesxs"><span style="font-size: small; color: #800080; font-family: Calibri;">http://tools.google.com/dlpage/chromesxs</span></a><span style="font-size: small; font-family: Calibri;">). </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-family: Calibri;"><span style="font-size: small;">Some results on earlier Chromium OS using Phoronix Test Suite is <a target="_blank" href="http://www.phoronix.com/scan.php?page=article&amp;item=chromium_moblin_benchmarks&amp;num=1">here</a>:<span style="mso-spacerun: yes;">&nbsp; </span></span></span><span style="font-size: small; font-family: Calibri;">. Other than this, there is no publicly available performance comparison of Chromium OS devices at this time. </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span style="font-size: small; font-family: Calibri;">&nbsp;</span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: small; font-family: Calibri;">A side note: major browsers (Chrome, IE9 , firefox 4) are all leveraging GPU for 2D/3D rendering. </span></p>]]></content:encoded>
    </item>
    <item>
      <title>N Things Google Needs to Fix in Android</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/n-things-google-needs-to-fix-in-android</link>
      <pubDate>Mon, 09 Aug 2010 12:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2010/08/09/n-things-google-needs-to-fix-in-android/</guid>
      <description><![CDATA[Wired runs a story about "5 Things Google Needs to Fix in Android". Here are the 5 things identified...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: helvetica;"><span style="font-size: small;">Wired runs a story about "<a title="5 Things Google Needs to Fix in Android" href="http://www.wired.com/gadgetlab/2010/08/5-android-fixes/">5 Things Google Needs to Fix in Android</a>". Here are the 5 things identified with my comment:</span></span></p>
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;"><b>Push for More Consistency</b></span></span> </li>
</ul>
<p><span style="font-family: helvetica;"><span style="font-size: small;"><i>"What makes it worse, he says, is that the Android experience is even 
inconsistent across manufacturers, as each phone maker layers their own 
interface on top (think HTC Sense and Motorola&rsquo;s Motoblur) as a way of 
making their Android phones stand out. And these extra layers, of 
course, make it especially hard to update a phone to the latest version 
of Android, creating an even larger disparity between what Android 
phones can and can&rsquo;t do."</i></span></span></p>
<p><span style="font-family: helvetica;"><span style="font-size: small;">This is indeed a dilemma. On one hand, OEMs need to have a software platform that supports the creation of hardware and software differentiations to build brand affinity, which naturally leads to some unique user experience of the home screen, the out-of-the-box application portfolio, OEM value-add contents and services on the device or in the cloud, and sometimes an application SDK for devices made by the same OEM. On the other hand, the software platform vendors (Google, Microsoft, and Symbian/Nokia) don't want to see their own ecosystem get too fragmented and thus would like to build more consistency into the platform.&nbsp; My take is that OEMs must be able to innovate on top of the software platform--this is Rule #1. Therefore Google must figure out a way to maintain UI design and platform customization consistency with their frequently updated releases, making it possible for OEMs to catch up with the new releases quickly.</span></span></p>
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;"><b>Reorganize Android Market</b></span></span></li>
</ul>
<p><i><span style="font-family: helvetica;"><span style="font-size: small;">"The lack of spell-check when searching for apps is just a minor reason 
why navigating the Android Market can be so frustrating. It&rsquo;s also 
difficult to sift through apps. While users can whittle apps down to 
broad categories, such as games, they can&rsquo;t sort by rating or recently 
added."</span></span></i></p>
<p><span style="font-family: helvetica;"><span style="font-size: small;">Can Android Market offer some sort of 'shopping wizard' that leverages some Q&amp;As with the user as well as social networking data to create app recommendations? Or can it provide something similar to <a target="_blank" title="Apple Genius" href="http://support.apple.com/kb/ht2978">Apple Genius</a> in the apple app store? </span></span></p>
<p><span style="font-family: helvetica;"><span style="font-size: small;">Update: Android Market now has the "Just In" list of apps.</span></span></p>
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;"><b>Make it Easy to Kill Apps</b></span></span></li>
</ul>
<p><i><span style="font-family: helvetica;"><span style="font-size: small;">"Steve Jobs himself said, &ldquo;If you see a task manager, they blew it.&rdquo; By 
&ldquo;they&rdquo; he means Google&rsquo;s Android team. The problem is that there&rsquo;s no 
visual indicator of which apps are running, nor is there an easy way to 
exit them or force them to close. (Slacker&rsquo;s player lets you tap a soft 
key to quit, but this isn&rsquo;t a consistent experience &mdash; it varies from app
 to app.)"</span></span></i></p>
<p><span style="font-family: helvetica;"><span style="font-size: small;">Task Manager as a platform component is definitely needed. No matter how smart the OS is (in terms of being able to track and kill long-run resource intensive applications that bring down device performance), user will still need a tool to do it themselves. </span></span></p>
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;"><b>Don&rsquo;t Let Apps Run Wild</b></span></span></li>
</ul>
<p><i><span style="font-family: helvetica;"><span style="font-size: small;">"While we&rsquo;re on the subject of multitasking, both Castonguay and Horman 
agree that the freedom that draws developers to Android in the first 
place has a downside: It also lets apps go overboard, slowing down 
phones and draining their battery life. Google should step in, they say,
 and enforce guidelines for how often an app pings the cloud or notifies
 the user when it&rsquo;s running in the background."</span></span></i></p>
<p><span style="font-family: helvetica;"><span style="font-size: small;">This is about the Android SDK design and Android Market certification process. The Android SDK is very powerful and flexible, not to mention the NDK. And this is one of the greatest advantages of the Android platform. So keep it as-is. Instead, what Google should do is to create a technical acceptance process for Android applications, and only allow those applications that pass a certain App Health check to publish. <a target="_blank" title="Microsoft is doing something similar at this point" href="http://developer.windowsphone.com/">Microsoft is doing something similar at this point</a>.</span></span></p>
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;"><b>Cater to the Attention-Deficit Crowd</b></span></span></li>
</ul>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;">"<i>...the platform needs to be more nimble at switching between open apps. 
Right now, Android users have to hit the home button to exit an app and 
return to the home screen (they can also hold down the home button to 
see key apps, but it&rsquo;s the same idea)."
</i></span></span>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;"><br />This is no a problem, I suppose. Right now one just needs to press and hold the home button to see and launch the applications used recently. Given a form factor of around 4" screen, I am not sure if there are better ways of doing application switching. </span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;"><br /></span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;">I also want to share my thought on the improvement that Google should make for Android platform development, from OEM's perspective. </span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;"><br /></span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;">
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;">A platform development IDE</span></span></li>
</ul>
</div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;">Currently native code is debugged using gdb. A better integrated development environment similar to Microsoft Platform Builder will make platform development a lot easier. Ideally, the tool should provide easy kernel and platform level debugging capabilities (ddd-like), dmesg and logcat windows, flashing capability, and other small tasks that are currently enabled by miscellaneous command line tools scattered around the Android building environment.&nbsp; </span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;"><br /></span></span></div>
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;">A better UI layout tool</span></span></li>
</ul>
</div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;">Historically, Java application framework adopts a layout engine that was designed to allow easy adaption of various screen sizes. It works OK, but not very natural. Developers have to think about several layers of layouts, one embedded into another, for a hardly complicated UI. The SDK should have included a tool to make it easier. </span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;"><br /></span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;">
<ul>
<li><span style="font-family: helvetica;"><span style="font-size: small;">A set of performance troubleshooting tools</span></span></li>
</ul>
</div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;">While traceview can help profile the performance of the device, there is no real-time thread and events monitoring tool (such as&nbsp; <a title="Kernel Tracker" href="http://blogs.msdn.com/b/sloh/archive/2005/05/17/introduction-to-remote-kernel-tracker.aspx">Kernel
 Tracker</a> on Windows CE) on Android now. In addition, it would be of great help if there is a tool that breakdown UI delay at the application layer, within the Dalvik runtime, within system libraries, and even in kernel drivers. Of course, this requires the framework and system libraries source code to have built-in performance counters. As of now, performance troubleshooting on Android can be accomplished by instrumenting at different layers and investigate the logs, which usually turns out to be very tedious and time consuming. Google should do something to make it easier. </span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;"><br /></span></span></div>
<div style="overflow: hidden; color: #000000; background-color: transparent; text-align: left; text-decoration: none; border: medium none;"><span style="font-family: helvetica;"><span style="font-size: small;">Overall Google is doing an excellent job creating the ever-growing Android ecosystem in such a short period of time. I am sure the Googlers in Mountain View are smart enough to find out what are missing in their current offerings. Just bear in mind that Android innovations comes not only from Google, but also from device OEMs. <br /></span></span></div>]]></content:encoded>
    </item>
    <item>
      <title>I Want An APP That ...</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/i-want-an-app-that</link>
      <pubDate>Thu, 15 Jul 2010 15:15:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2010/07/15/i-want-an-app-that/</guid>
      <description><![CDATA[Let's face it: the App Store is great idea. Fact is, mobile device is very personal, and should be...]]></description>
      <content:encoded><![CDATA[<p><img src="http://graphics8.nytimes.com/images/2010/07/15/business/JP.-POGUE-1/JP.-POGUE-1-articleInline.jpg" style="max-width: 550px;" border="0" />Let's face it: the App Store is great idea. Fact is, mobile device is very personal, and should be heavily customized or tailored for individuals specific computing need, for day-to-day life.&nbsp; The device must have the capability to allow a user to choose whatever tools that can make her work/life easier and happier. There are already over 225,000 apps in Apple App Store, and 60,000+ in Android Market. Many people are becoming app-hungry as you can always run into some apps that you think useful or just funny. <a target="_blank" href="http://www.usatoday.com/tech/products/2010-03-31-1Aappworld31_CV_N.htm" title="http://www.usatoday.com/tech/products/2010-03-31-1Aappworld31_CV_N.htm">It is an app world, indeed.</a></p>
<p>One may argue that a web browser based computing model would suffice--user just goes to various web sites from their device and do the stuff there. This argument fails to acknowledge a fundamental software design rationale for mobile devices: mobile devices usually have a small form-factor (which means the software UI must be well optimized to be simple and less typing), and are equipped with peripherals that mobile software can leverage to create unique mobile experience. In sheer contrast to desktop computing where more applications are migrating to become browser based, mobile software are increasingly standalone apps that offer very finger friendly interactions.</p>
<p>So what apps do you want to put onto your iPhone/iPod, Android, Windows Phone 7? Some of my most frequently used apps on my iPod Touch are:</p>
<ul>
<li>Email, outlook, gmail, etc;</li>
<li>Stanza ebook reader, free download of many books, magazines from difference sources;</li>
<li>Weather;</li>
<li>eBuddy messager;</li>
<li>Engadget app;</li>
<li>cnBeta app, Chinese digg;</li>
<li>Yelp, location aware local search and review;</li>
<li>Sina microblogging (Sina weibo), Chinese twitter;</li>
<li>Seattle Times app;</li>
<li>NY Times app;</li>
<li>CCTV mobile tv app;</li>
<li>Skype;</li>
<li>LinkedIn app;</li>
<li>Free RSS app;</li>
<li>mitbss.com app, wasting time on meaningless forum gossips;</li>
</ul>
<p>If you are an app developer, and want to find a good app idea, I suggest you read "<a target="_blank" href="http://www.nytimes.com/2010/07/15/technology/personaltech/15pogue.html?_r=1&amp;adxnnl=1&amp;ref=technology&amp;adxnnlx=1279230544-dslMfURI6nj6bQmgS3XS7Q" title="http://www.nytimes.com/2010/07/15/technology/personaltech/15pogue.html?_r=1&amp;adxnnl=1&amp;ref=technology&amp;adxnnlx=1279230544-dslMfURI6nj6bQmgS3XS7Q">App We Wish We Had</a>" by New York Times. There are some amazingly cool idea in this story, such as:</p>
<ul>
<li><i>One popular idea: a To Do-list program that, thanks to the phone&rsquo;s GPS, would remind you of things to do when you&rsquo;re in the right place to do them &mdash; to &ldquo;pick up a saw when you&rsquo;re near the hardware store...But the Twitterites were quick to identify programs that already do that: Reqall, Omnifocus, Remember the Milk, Geostrings, Pocket Informant, Astrid, Task Aware and so on.</i></li>
<li><i>Shazam for movies and TV, art work, plants, Chinese/Italian restaurant menu, person, and pretty much everything, : Shazam is the app that identifies a pop song on the radio just by listening to it.&nbsp;Now think&nbsp;about&nbsp;the device&nbsp;is a genius standing by: for whatever you are interested in getting more information, the genius can just whisper by your ear or show you in the air. This is&nbsp;so called "augmented reality", such as&nbsp;the </i><a target="_blank" href="http://www.wikitude.org/" title="http://www.wikitude.org/"><i>wikitube world browser</i></a><i>.&nbsp;</i></li>
<li><i>Location aware parking app that can tell the parking rules for the spot;</i></li>
<li><i>Six-degree of separation app that can tell you how you may be tied to someone you just met;</i></li>
<li><i>Rejuvenator: Aim iPhone camera at your face, snap a pic &mdash; it digitally subtracts 5, 10, 15, 20 years from your image.&rdquo;&nbsp; You don't want to have such an app on your PC; but, this is mobile, and you want to play with it for fun!</i></li>
<li><i>An app that takes a picture of the shopping/restaurant receipts and record it.</i></li>
</ul>
<p>Having read the story, I was thinking what apps I need. Here are some ideas:</p>
<ul>
<li>Hot&nbsp;Tweets: the app should give a daily summary of hot tweets&nbsp;(of specific&nbsp;categories such as mobile phones, celebrities, etc)&nbsp;on Twitter and Google Buzz so one will never miss anything big;</li>
<li>Price Drop Notifier: the app should gather information from various bargain deal sites, grocery store sites, online shopping sites, &nbsp;and let user set some triggers when the price of certain stuff dropped into your expected range. And when you are close to a store, the app reminds you to check out the price-dropped items that you have been watching for;</li>
<li>Want More Apps app: An app that tells me&nbsp;some new apps that I may be interested in, by using recommendations from people of similar interest; This is very useful for non-English users-it is difficult to find popular Chinese apps in Apple App Store;</li>
<li>Eat What app: based on your diet so far this week, the app suggests you eat more veggie and fruits, or just "no worries; go enjoy the fries";</li>
</ul>
<p>You get the idea. More to come...</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 7: A New Generation of User Experience?</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/windows-phone-7-a-new-generation-of-user-experience</link>
      <pubDate>Sat, 19 Jun 2010 21:38:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2010/06/19/windows-phone-7-a-new-generation-of-user-experience/</guid>
      <description><![CDATA[By far we all know the first wave of Windows Phone 7 devices (to be available Oct 2010) will provide...]]></description>
      <content:encoded><![CDATA[<p>By far we all know the first wave of Windows Phone 7 devices (to be available Oct 2010) will provide a complete new user experience. Here are some 'leaked' videos of WP7 devices (disclaimer: unverified sources):</p>
<p><b><span style="font-size: large;">Samsung</span>: </b></p>
<p>

<object height="385" width="640">
<param name="movie" value="https://www.youtube.com/v/yjlvtHjJtps&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<embed src="https://www.youtube.com/v/yjlvtHjJtps&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="385" width="640"></embed>
</object>
</p>
<p>
<b><span style="font-size: large;">LG</span>:</b></p>
<p>
<object height="385" width="640">
<param name="movie" value="https://www.youtube.com/v/_JqAnhYVeZs&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" /><embed src="https://www.youtube.com/v/_JqAnhYVeZs&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="385" width="640"></embed>
</object>
</p>
<p>&nbsp;</p>
<p><span style="font-size: large;"><b>Unknown OEM:</b></span></p>
<p>
<object height="385" width="640">
<param name="movie" value="https://www.youtube.com/v/sBOFIbAddcY&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_detailpage&amp;fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" /><embed src="https://www.youtube.com/v/sBOFIbAddcY&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_detailpage&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="385" width="640"></embed>
</object>
</p>
<p>&nbsp;</p>
<p>
So the UI looks pretty cool-instead of placing a matrix of application icons on the screen, Microsoft chooses to let user build "tiles" on the home screen, with each tile linking to an application. Actually I believe this design is a bit ahead of iPhone. Look at Windows 3.1 and iPhone. Do you see some similarity?</p>
<p>&nbsp;</p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td><span style="font-size: large;"><b>Windows 3.1<br /></b></span></td>
<td><span style="font-size: large;"><b>iPhone</b></span></td>
</tr>
<tr>
<td><img src="http://www.brokenthorn.com/Resources/images/Windows3.gif" style="max-width: 550px;" border="0" height="341" width="321" /></td>
<td>
<p><img src="http://mikecane.files.wordpress.com/2007/09/iphone.jpg" style="max-width: 550px;" border="0" height="337" width="226" /></p>
</td>
</tr>
</tbody>
</table>
<p>Naturally, one may ask: other than the "icon matrix", is there a better way to present a list of applications on a screen? Maybe this one?</p>
<p><img src="http://www.wearesuperfamous.com/wp-content/uploads/2010/02/windows-phone-7-series.jpg" style="max-width: 550px;" border="0" /></p>
<p>It seems to me that the WP7 UI is kind of a big leap from the "icon matrix" style--this is like Win95 versus Windows 3.1.</p>
<p>Microsoft has finally figured out how to leverage the company's other assets to grow the Windows Phone ecosystem: XBox, Zune, Office Mobile, and Sharepoint.Granted, a significant part of the new system borrowed ideas from iPhone: "touching is believing", the capacitive multi-touch screen, MarketPlace (app store), few buttons (3 instead of 1 on iPhone), etc. Still, WP7 has some edge over other platforms:</p>
<ul>
<li><b>XBox Live</b>: neither Apple and Google has such a gaming network; Nintendo and Sony do; but <a target="_blank" title="Sony PSP phone?" href="http://www.engadget.com/2010/03/04/sony-prepping-new-line-of-handhelds-including-psp-phone/">are they planning to make phones</a>?&nbsp;</li>
<li><b>Office Mobile</b>: view and edit your Office documents on the device;</li>
<li><b>Zune</b>: very similar to iTunes, and what you already see on a Zune HD device. Sleek UI, simple PC client;</li>
</ul>
<p>Hopefully these new things, plus a stable, touch-friendly, and "simple" UI will win back many deeply unsatisfied Windows Mobile users.</p>]]></content:encoded>
    </item>
    <item>
      <title>Multitasking is good, but the OS has to be smart</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/multitasking-is-good-but-the-os-has-to-be-smart</link>
      <pubDate>Fri, 09 Apr 2010 09:09:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2010/04/09/multitasking-is-good-but-the-os-has-to-be-smart/</guid>
      <description><![CDATA[One of the biggest complaints for iPhone OS is the lack of 
multitasking-you have to close the...]]></description>
      <content:encoded><![CDATA[<p>One of the biggest complaints for iPhone OS is the lack of 
multitasking-you have to close the foreground app before you run another
 one. By "close" I mean literally stop it, not just minimize its window.
 This is bad - imagine you are uploading pictures to picasa while 
receiving a Skype call. Your picture upload task will be paused.&nbsp;&nbsp; <br></p><p>The new iPhone OS 4.0 now supports multitasking - for applications such as VoIP, background audio, location service, photo uploading etc. As Steve Jobs said, </p><p>"<span class="live_stamp"></span>It's easy to do this in a way 
that drains battery life, and a way that reduces performance of the 
foreground app. If you don't do it right, your phone will feel 
sluggish."</p><p>&nbsp;<img src="http://www.blogcdn.com/www.engadget.com/media/2010/04/2010-04-08iphoneos4p-1.jpg" mce_src="http://www.blogcdn.com/www.engadget.com/media/2010/04/2010-04-08iphoneos4p-1.jpg" width="320" height="480"></p><p>We know other mobile operating systems usually have a Task Manager where you can kill an app (a process, in Computer Science terms). Why do you need this? Well, this is because usually on mobile devices an application will not be terminated when you taps the "Close" button-the process is still there, the window is minimized, and its threads are either suspended or keep running. When you run many apps, and each will consume system resources, and the device will become sluggish. Thus clearly there is a need to terminate some apps completely to free up some resources such that other apps can run smoothly. The operating system may have a smart algorithm to select and skill some "bad" apps for you, in which case you don't need to run your OS task manager or an OEM utility to do that. </p><p><img src="http://www.1800pocketpc.com/blog/wp-content/uploads/2009/03/htctaskmanager.jpg" mce_src="http://www.1800pocketpc.com/blog/wp-content/uploads/2009/03/htctaskmanager.jpg" width="240" height="320">&nbsp;</p><p>So really it is about creating the best user experience on a mobile device. To average consumers, it is kind of difficult to guide her to Task Manager where she can make a choice and terminate an app when the device becomes sluggish. The OS should either </p><ol><li>build an app framework that prevent this from happening, by offering limited multitasking capabilities to apps; or</li><li>offer full multitasking but figure out a smart and non-intrusive way to manage system resources and free up whenever needed<br></li></ol><p>Looks like iPhone and Windows Phone 7 is taking Approach #1. And Android and Windows Mobile 6.x are using approach #2. It is hard to say which approach will work best on today's smart devices. But one thing is for sure, it is definitely stupid and dumb to clone a desktop experience (thus the way to managing multitasking) to mobile devices: when your PC becomes slow, you "Exit" from WORD or Outlook, "Close" your 10+ IE windows, and "Stop" your P2P file download, and sometimes you just reboot the PC, wait 2 minutes until all the craps are settled down. </p><p>On mobile devices, however, you need Instant Access to phone functions, to web browsing, to turn-by-turn navigation, and so on. To average users, the device has two states: it is ON that you can do things; or it is OFF that nothing is running. It just requires a quick button press to switch between ON and OFF. No worries about 'power it off', or 'suspend and resume', and things like that.</p><br>]]></content:encoded>
    </item>
    <item>
      <title>Managing APN Settings on Google Android</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/managing-apn-settings-on-google-android</link>
      <pubDate>Tue, 13 Oct 2009 09:53:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2009/10/13/managing-apn-settings-on-google-android/</guid>
      <description><![CDATA[An APN (Access Point Name) is the information needed to establish a GPRS/EDGE/UMTS cellular packet...]]></description>
      <content:encoded><![CDATA[<p>An APN (Access Point Name) is the information needed to establish a GPRS/EDGE/UMTS cellular packet data connection on a mobile device. Usually the device can be configured by the operator, the OEM, and users with an APN address such as wap.cingular or epc.tmobile.com that will be eventually resolved to the IP address of the GGSN in the operator's network. </p>
<p>Users can go to Settings--&gt;Wireless control--&gt;Mobile networks--&gt;Access point names to view and edit existing APNs.</p>
<p>Google Android uses a SQLite data table to store all APNs configured on the device, as shown below:</p>
<p>Database: /data/data/com.android.providers.telephony/databases/telephony.db<br>Table: carriers<br>URI: content://telephony/carriers<br></p>
<p><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 12"><meta name="Originator" content="Microsoft Word 12"><link href="file:///C:%5CUsers%5Cpzheng%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"><link href="file:///C:%5CUsers%5Cpzheng%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"><link href="file:///C:%5CUsers%5Cpzheng%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:TrackMoves/>
  <w:TrackFormatting/>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>EN-US</w:LidThemeOther>
  <w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:SplitPgBreakAndParaMark/>
   <w:DontVertAlignCellWithSp/>
   <w:DontBreakConstrainedForcedTables/>
   <w:DontVertAlignInTxbx/>
   <w:Word11KerningPairs/>
   <w:CachedColBalance/>
   <w:UseFELayout/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]--><style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:宋体;
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-alt:SimSun;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 680460288 22 0 262145 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
@font-face
	{font-family:"\@宋体";
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 680460288 22 0 262145 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:宋体;
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:宋体;
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin-top:0in;
	mso-para-margin-right:0in;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;}
</style>
<![endif]-->

</p><table class="MsoNormalTable" style="border: medium none ; width: 433.45pt; margin-left: 4.65pt; border-collapse: collapse;" width="578" border="1" cellpadding="0" cellspacing="0">
 <tbody><tr style="height: 15pt;">
  <td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 24.6pt; height: 15pt;" valign="bottom" width="33" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">_id<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 70.65pt; height: 15pt;" valign="bottom" width="94" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;</span>name<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 43.35pt; height: 15pt;" valign="bottom" width="58" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">numeric<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 28.9pt; height: 15pt;" valign="bottom" width="39" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">mcc<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 30.05pt; height: 15pt;" valign="bottom" width="40" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">mnc<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 95pt; height: 15pt;" valign="bottom" width="127" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">apn<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 33.65pt; height: 15pt;" valign="bottom" width="45" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">user<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 53.5pt; height: 15pt;" valign="bottom" width="71" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">server<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 53.75pt; height: 15pt;" valign="bottom" width="72" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;</span>password<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="height: 15pt;">
  <td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 24.6pt; height: 15pt;" valign="bottom" width="33" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: right; line-height: normal;" align="right"><span style="color: black;">1<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 70.65pt; height: 15pt;" valign="bottom" width="94" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;</span>T-Mobile US<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 43.35pt; height: 15pt;" valign="bottom" width="58" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: right; line-height: normal;" align="right"><span style="color: black;">310260<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 28.9pt; height: 15pt;" valign="bottom" width="39" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: right; line-height: normal;" align="right"><span style="color: black;">310<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 30.05pt; height: 15pt;" valign="bottom" width="40" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: right; line-height: normal;" align="right"><span style="color: black;">260<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 95pt; height: 15pt;" valign="bottom" width="127" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">epc.tmobile.com<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 33.65pt; height: 15pt;" valign="bottom" width="45" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">none<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 53.5pt; height: 15pt;" valign="bottom" width="71" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;&nbsp; </span>*<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 53.75pt; height: 15pt;" valign="bottom" width="72" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;</span>none<o:p></o:p></span></p>
  </td>
 </tr>
</tbody></table>

&nbsp;<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 12"><meta name="Originator" content="Microsoft Word 12"><link href="file:///C:%5CUsers%5Cpzheng%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"><link href="file:///C:%5CUsers%5Cpzheng%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"><link href="file:///C:%5CUsers%5Cpzheng%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:TrackMoves/>
  <w:TrackFormatting/>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>EN-US</w:LidThemeOther>
  <w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:SplitPgBreakAndParaMark/>
   <w:DontVertAlignCellWithSp/>
   <w:DontBreakConstrainedForcedTables/>
   <w:DontVertAlignInTxbx/>
   <w:Word11KerningPairs/>
   <w:CachedColBalance/>
   <w:UseFELayout/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]--><style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:宋体;
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-alt:SimSun;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 680460288 22 0 262145 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
@font-face
	{font-family:"\@宋体";
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 680460288 22 0 262145 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:宋体;
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:宋体;
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin-top:0in;
	mso-para-margin-right:0in;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;}
</style>
<![endif]-->

<table class="MsoNormalTable" style="border: medium none ; width: 504.75pt; margin-left: 4.65pt; border-collapse: collapse;" width="673" border="1" cellpadding="0" cellspacing="0">
 <tbody><tr style="height: 15pt;">
  <td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 36.75pt; height: 15pt;" valign="bottom" width="49" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">proxy<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 29.9pt; height: 15pt;" valign="bottom" width="40" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">port<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 60.1pt; height: 15pt;" valign="bottom" width="80" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">mmsproxy<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 0.75in; height: 15pt;" valign="bottom" width="72" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">mmsport<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 3.25in; height: 15pt;" valign="bottom" width="312" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">mmsc<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 42.7pt; height: 15pt;" valign="bottom" width="57" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">type<o:p></o:p></span></p>
  </td>
  <td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 47.3pt; height: 15pt;" valign="bottom" width="63" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">current<o:p></o:p></span></p>
  </td>
 </tr>
 <tr style="height: 15pt;">
  <td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.75pt; height: 15pt;" valign="bottom" width="49" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;&nbsp; </span><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 29.9pt; height: 15pt;" valign="bottom" width="40" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 60.1pt; height: 15pt;" valign="bottom" width="80" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 0.75in; height: 15pt;" valign="bottom" width="72" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 3.25in; height: 15pt;" valign="bottom" width="312" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><u><span style="color: blue;"><a href="http://mms.msg.eng.t-mobile.com/mms/wapenc"><span style="color: blue;">http://mms.msg.eng.t-mobile.com/mms/wapenc</span></a><o:p></o:p></span></u></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 42.7pt; height: 15pt;" valign="bottom" width="57" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"><span style="color: black;">default<o:p></o:p></span></p>
  </td>
  <td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 47.3pt; height: 15pt;" valign="bottom" width="63" nowrap="nowrap">
  <p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: right; line-height: normal;" align="right"><span style="color: black;">1<o:p></o:p></span></p>
  </td>
 </tr>
</tbody></table>

<p>This is a data record in the carriers table. the "_id" is the primary key auto-generated when you add new APN records using APIs or the UI manually. The "name" filed will appear on the setting UI. The 'numeric' field identifies the network that the APN associates with, which is a combination of mcc (mobile country code) and mnc (mobile network code). An operator may have a number of 'numeric' values to cover all this network. The "mmsproxy", "mmsport", and "mmsc" fields are for MMS configurations. The "type" field for an APN can be either 'default' for general data traffic, or 'mms' for MMS. </p><p>Note: Android does not support multiple actively APNs (simultaneous PDP contexts), as of 1.6 SDK. In other words, if MMS APN is activated, then the default web APN will be disconnected.&nbsp; <br></p>
<p>The Android SDK (1.5 and 1.6) does not provide APIs to manage APN (Access Point Name)s directly. So you have to use the Telephony content provider to do that. Take a look at the <a href="http://www.netmite.com/android/mydroid/packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java" target="_blank" mce_href="http://www.netmite.com/android/mydroid/packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java">TelephonyProvider.java</a> source code will definitely help.I wrote some quick test code to enumerate and add APNs to the system, as well as set an APN to be the default one such that the device will use it for subsequent connections (this is indicated by the radio button in the APN list UI). </p>
<ul>
<li>&nbsp;Enumerate all APNs in the system: <br></li>
</ul>
<blockquote>
<blockquote>&nbsp;&nbsp;&nbsp; /* <br>&nbsp;&nbsp;&nbsp; &nbsp;* Information of all APNs<br>&nbsp;&nbsp;&nbsp; &nbsp;* Details can be found in com.android.providers.telephony.TelephonyProvider<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; public static final Uri APN_TABLE_URI = <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Uri.parse("content://telephony/carriers");<br>&nbsp;&nbsp;&nbsp; /* <br>&nbsp;&nbsp;&nbsp; &nbsp;* Information of the preferred APN<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; public static final Uri PREFERRED_APN_URI =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Uri.parse("content://telephony/carriers/preferapn");&nbsp; <br></blockquote>
</blockquote>
<blockquote>
<blockquote>
<p>&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp; * Enumerate all APN data<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private void EnumerateAPNs()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Cursor&nbsp;&nbsp; c = context.getContentResolver().query(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;APN_TABLE_URI, null, null, null, null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (c != null) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; *&nbsp; Fields you can retrieve can be found in<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;com.android.providers.telephony.TelephonyProvider :<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;db.execSQL("CREATE TABLE " + CARRIERS_TABLE +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"(_id INTEGER PRIMARY KEY," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"name TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"numeric TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"mcc TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"mnc TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"apn TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"user TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"server TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"password TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"proxy TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"port TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"mmsproxy TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"mmsport TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"mmsc TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"type TEXT," +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;"current INTEGER);");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String s = "All APNs:\n";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log.d(TAG, s);<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;s += printAllData(c); //Print the entire result set<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(SQLException e)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Log.d(TAG, e.getMessage());<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Log.d(TAG, s + "\n\n");<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;c.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; }</p>
</blockquote>
</blockquote>
<ul>
<li>Add a new APN record:</li>
</ul>
<blockquote>
<blockquote>&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp; * Insert a new APN entry into the system APN table<br>&nbsp;&nbsp;&nbsp;&nbsp; * Require an apn name, and the apn address. More can be added.<br>&nbsp;&nbsp;&nbsp;&nbsp; * Return an id (_id) that is automatically generated for the new apn entry.<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public int InsertAPN(String name, String apn_addr) <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int id = -1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ContentResolver resolver = context.getContentResolver();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ContentValues values = new ContentValues();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values.put("name", name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values.put("apn", apn_addr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * The following three field values are for testing in Android emulator only<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * The APN setting page UI will ONLY display APNs whose 'numeric' filed is <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * TelephonyProperties.PROPERTY_SIM_OPERATOR_NUMERIC.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * On Android emulator, this value is 310260, where 310 is mcc, and 260 mnc.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * With these field values, the newly added apn will appear in system UI.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values.put("mcc", "310");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values.put("mnc", "260");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values.put("numeric", "310260");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cursor c = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Uri newRow = resolver.insert(APN_TABLE_URI, values);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(newRow != null)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c = resolver.query(newRow, null, null, null, null);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log.d(TAG, "Newly added APN:");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printAllData(c); //Print the entire result set<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Obtain the apn id<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int idindex = c.getColumnIndex("_id");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.moveToFirst();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; id = c.getShort(idindex);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log.d(TAG, "New ID: " + id + ": Inserting new APN succeeded!");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(SQLException e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log.d(TAG, e.getMessage());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(c !=null ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id;<br>&nbsp;&nbsp;&nbsp; }<br></blockquote>
</blockquote>
<ul>
<li>&nbsp;Set an APN to be the default</li>
</ul>
<blockquote>&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp; * Set an apn to be the default apn for web traffic<br>&nbsp;&nbsp;&nbsp;&nbsp; * Require an input of the apn id to be set<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public boolean SetDefaultAPN(int id)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boolean res = false;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ContentResolver resolver = context.getContentResolver();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ContentValues values = new ContentValues();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //See /etc/apns-conf.xml. The TelephonyProvider uses this file to provide <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //content://telephony/carriers/preferapn URI mapping<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values.put("apn_id", id); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; resolver.update(PREFERRED_APN_URI, values, null, null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Cursor c = resolver.query(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PREFERRED_APN_URI, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; new String[]{"name","apn"}, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "_id="+id, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; null, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(c != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; res = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (SQLException e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log.d(TAG, e.getMessage());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return res;<br>&nbsp;&nbsp;&nbsp; }</blockquote>
<blockquote>Two helper functions are created to print data using a cursor:</blockquote>

<blockquote>&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp; * Return all column names stored in the string array<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private String getAllColumnNames(String[] columnNames)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String s = "Column Names:\n";<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(String t:columnNames)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s += t + ":\t";<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return s+"\n";<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp; Print all data records associated with Cursor c.<br>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp; Return a string that contains all record data.<br>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp; For some weird reason, Android SDK Log class cannot print very long string message.<br>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp; Thus we have to log record-by-record.<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; private String printAllData(Cursor c)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(c == null) return null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String s = "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int record_cnt = c.getColumnCount();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log.d(TAG, "Total # of records: " + record_cnt);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(c.moveToFirst())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String[] columnNames = c.getColumnNames();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log.d(TAG,getAllColumnNames(columnNames));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s += getAllColumnNames(columnNames);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; do{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String row = "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(String columnIndex:columnNames)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int i = c.getColumnIndex(columnIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; row += c.getString(i)+":\t";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; row += "\n";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log.d(TAG, row);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s += row;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }while(c.moveToNext());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Log.d(TAG,"End Of Records");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return s;<br>&nbsp;&nbsp;&nbsp; }</blockquote>The Android emulator's default APN is a T-Mobile APN as shown in the picture below: <br><blockquote><br></blockquote><p>

<a href="http://picasaweb.google.com/lh/photo/Vs2TuSvmkB8MvW0alLVltw?feat=embedwebsite"><img src="http://lh4.ggpht.com/_kuJ2zKqXit8/StTO02pYf3I/AAAAAAAAGnM/wz7twy7y46o/s400/apn1.png"></a></p><p>&nbsp;Then, let's add a new APN and set it to default:</p><blockquote><p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Let's try insert a new APN, whose name is 'google2' and apn address is google.com, just for fun.<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int id = InsertAPN("google2","google.com");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Set the newly added APN to be the default one for web traffic.<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //The new one will show up in settings-&gt;Wireless controls-&gt;Mobile networks-&gt;Access Point Names),<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //and has been set as default (indicated by the green check button)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SetDefaultAPN(id);</p></blockquote><p>Then the newly added APN will appear in the UI and shown as 'default'. <br></p><p>

<a href="http://picasaweb.google.com/lh/photo/aCWXt7Ylgez4C1OR19jyVA?feat=embedwebsite"><img src="http://lh6.ggpht.com/_kuJ2zKqXit8/StTO0xKCPJI/AAAAAAAAGnQ/Rgztrt0lZr4/s400/apn2.png"></a>

</p>]]></content:encoded>
    </item>
    <item>
      <title>Mobile Service Innovations In Developing Countries</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/mobile-service-innovations-in-developing-countries</link>
      <pubDate>Sun, 04 Oct 2009 17:24:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2009/10/04/mobile-service-innovations-in-developing-countries/</guid>
      <description><![CDATA[Check out the latest special report on mobile marvels by Economist. For many of the people in Kenya...]]></description>
      <content:encoded><![CDATA[<p>Check out the <a href="http://www.economist.com/specialreports/displayStory.cfm?story_id=14483896" target="_blank" mce_href="http://www.economist.com/specialreports/displayStory.cfm?story_id=14483896">latest special report on mobile marvels by Economist</a>. For many of the people in Kenya who don't have a bank card and a named address, mobile phones are increasingly becoming an indispensable part of day-to-day life.&nbsp; Farmers in Uganda are using SMS based query services o know the weather forecast for the coming season so they can decide when to plant. T<a href="http://www.economist.com/specialreports/displayStory.cfm?story_id=14483896" target="_blank" mce_href="http://www.economist.com/specialreports/displayStory.cfm?story_id=14483896">he trends of mobile services in developing countries are summarized</a> as follows:</p><blockquote><p><i>The third trend is the development of new phone-based services, beyond
voice calls and basic text messages, which are now becoming feasible
because mobile phones are relatively widely available. <b>In rich
countries most such services have revolved around trivial things like
music downloads and mobile gaming. In poor countries data services such
as mobile-phone-based agricultural advice, health care and money
transfer could provide enormous economic and developmental benefits</b>.
Beyond that, mobile networks and low-cost computing devices are poised
to offer the benefits of full internet access to people in the
developing world in the coming years. </i></p></blockquote><p>And where are the new mobile subscribers?<br></p><p>&nbsp;<img src="http://media.economist.com/images/20090926/CSR059.gif" mce_src="http://media.economist.com/images/20090926/CSR059.gif" width="256" height="232"></p><p>&nbsp;What does this mean to mobile OEMs and software vendors? I think there are at least two aspects to look into:</p><ol><li>From business development perspective: Do we have acknowledged this trend in the global mobile ecosystem and have developed strategy to build products optimized for those booming emerging markets?<br></li><li>Form R&amp;D perspective: What technologies can be applied to these new services to provide better user experience, productivity, security, interoperability, and reliability?&nbsp; Beyond <a href="http://www.economist.com/opinion/displaystory.cfm?story_id=14505519" target="_blank" mce_href="http://www.economist.com/opinion/displaystory.cfm?story_id=14505519">mobile money</a>, <a href="http://www.techcrunch.com/2009/06/29/googles-africa-strategy-search-and-trade-via-sms/" target="_blank" mce_href="http://www.techcrunch.com/2009/06/29/googles-africa-strategy-search-and-trade-via-sms/">text query service</a>, <a href="http://www.economist.com/displayStory.cfm?story_id=14493098" target="_blank" mce_href="http://www.economist.com/displayStory.cfm?story_id=14493098">social finance</a>, and <a href="http://www.techcrunch.com/2009/03/12/meanwhile-in-india-google-launches-village-voicemail-with-noticeboard/" target="_blank" mce_href="http://www.techcrunch.com/2009/03/12/meanwhile-in-india-google-launches-village-voicemail-with-noticeboard/">village computing</a>, what else can be developed to address big problems that people in developing countries are facing everyday? <br></li></ol>Sounds like unlimted potential if you look at the wide range of devices/services that can be developed for emerging markets, and keep in mind that their buying power will increase significantly as these become an essential part of their lives. <br>]]></content:encoded>
    </item>
    <item>
      <title>ConnectivityManager in Android SDK: Compared with Connection Manager in Windows Mobile</title>
      <link>https://docs.microsoft.com/archive/blogs/zhengpei/connectivitymanager-in-android-sdk-compared-with-connection-manager-in-windows-mobile</link>
      <pubDate>Wed, 23 Sep 2009 01:03:00 GMT</pubDate>
      <dc:creator><![CDATA[Dr. Pei Zheng]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/zhengpei/2009/09/23/connectivitymanager-in-android-sdk-compared-with-connection-manager-in-windows-mobile/</guid>
      <description><![CDATA[Anyone who has ever used Windows Mobile (actually WinCE) Connection Manager will probably share mix...]]></description>
      <content:encoded><![CDATA[<p>Anyone who has ever used Windows Mobile (actually WinCE) Connection Manager will probably share mix feelings: on one side, the ConnMgr APIs provide a nice abstraction for applications to request and use a connection without knowing and controlling the physical connectivity; on the other side, it has been a pain in the neck to override or bypass Connection Manager's connection selection logic if the application should use a specific physical connection (for example, GPRS rather than WiFi). And the concept of metanetworks, Internet, Work, WAP network, Secured WAP, is indeed very confusing and difficult to manipulate. </p>
<p>So how does Android manage connections?</p>
<p>In Android SDK 1.5 (code named cupcake),&nbsp; the android.net.ConnectivityManager class (this is Java, not C++) provides connection state management and notification functionality. Specifically, it can be used to:<br></p>
<ol>
<li>Obtain broadcast intents when network connectivity changes by checking ConnectivityManager.CONNECTIVITY_ACTION and ConnectivityManager.EXTRA_NETWORK_INFO in a class extended from BroadcastReceiver. (For a brief introduction to Android application fundamentals, <a href="http://developer.android.com/guide/topics/fundamentals.html" target="_blank" mce_href="http://developer.android.com/guide/topics/fundamentals.html">read this document</a>. An example of network connectivity listener can be found <a href="http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/net/NetworkConnectivityListener.java" target="_blank" mce_href="http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/net/NetworkConnectivityListener.java">here</a>.<br></li>
<li>Query the coarse-grained or fine-grained state of the available networks using ConnectivityManager.GetActiveNetworkInfo() or ConnectivityManager.GetNetworkInfo(int networkType). <br></li></ol>
<p>This is same-old same-old as in Windows Mobile, which provides similar APIs like ConnMgrRegisterStatusNotification(), ConnMgrConnectionStatus, and ConnMgrQueryDetailedStatus() (examples of these APIs can be found in WM SDK <a href="http://msdn.microsoft.com/en-us/library/aa455226.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/aa455226.aspx">cmhelper</a>).<br><br>However, the ConnectivityManager class does offer an interesting method called requestRouteToHost():<br></p>
<div class="jd-details api apilevel-1">
<blockquote>
<h4 class="jd-details-title"><span class="normal">public boolean </span><span class="sympad">requestRouteToHost</span> <span class="normal">(int networkType, int hostAddress)</span> </h4>
<div class="api-level">Since: <a href="http://developer.android.com/guide/appendix/api-levels.html#level1">API Level 1</a> </div>
<div class="jd-tagdata jd-tagdescr">
<p>Ensure that a network route exists to deliver traffic to the specified host via the specified network interface. An attempt to add a route that already exists is ignored, but treated as successful.</p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tbody>
<tr>
<th>networkType </th>
<td>the type of the network over which traffic to the specified host is to be routed</td></tr>
<tr>
<th>hostAddress </th>
<td>the IP address of the host to which the route is desired</td></tr></tbody></table></div>
<h5 class="jd-tagtitle">Returns</h5>
<ul class="nolist">
<li><code class="Code prettyprint">true</code> on success, <code class="Code prettyprint">false</code> on failure </li></ul></blockquote>
<div class="jd-details-descr">
<div class="jd-tagdata"></div></div></div>
<p>&nbsp;This method is very useful--it allows your application to ensure that a desired physical connectivity (represented by the networkType) is available to reach a specific destination. If a route to the destination IP address from the desired network type is in place (in the routing table), then it simply returns success. Otherwise, it will try to make that happen--this is not mentioned in the above description but can be traced to ConnectivityService class:</p>
<p>In <a href="http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/net/ConnectivityManager.java" target="_blank" mce_href="http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/net/ConnectivityManager.java">ConnectivityManager class</a> where mService is a ConnectivityService object: <br></p>/**<br>&nbsp;&nbsp;&nbsp;&nbsp; * Ensure that a network route exists to deliver traffic to the specified<br>&nbsp;&nbsp;&nbsp;&nbsp; * host via the specified network interface.<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param networkType the type of the network over which traffic to the specified<br>&nbsp;&nbsp;&nbsp;&nbsp; * host is to be routed<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param hostAddress the IP address of the host to which the route is desired<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return {@code true} on success, {@code false} on failure<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public boolean requestRouteToHost(int networkType, int hostAddress) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enforceChangePermission();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!ConnectivityManager.isNetworkTypeValid(networkType)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetworkStateTracker tracker = mNetTrackers[networkType];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * If there's only one connected network, and it's the one requested,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * then we don't have to do anything - the requested route already<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * exists. If it's not the requested network, then it's not possible<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * to establish the requested route. Finally, if there is more than<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * one connected network, then we must insert an entry in the routing<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * table.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (getNumConnectedNetworks() &gt; 1) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tracker.requestRouteToHost(hostAddress);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tracker.getNetworkInfo().getType() == networkType;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>The mNetTrackers array contains NetworkStateTracker objects for different network types (mobile data and WiFi).<br><br>In MobileDataStateTracker class, which extends from NetworkStateTracker:<br><br>/**<br>&nbsp;&nbsp;&nbsp;&nbsp; * Ensure that a network route exists to deliver traffic to the specified<br>&nbsp;&nbsp;&nbsp;&nbsp; * host via the mobile data network.<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param hostAddress the IP address of the host to which the route is desired,<br>&nbsp;&nbsp;&nbsp;&nbsp; * in network byte order.<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return {@code true} on success, {@code false} on failure<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; @Override<br>&nbsp;&nbsp;&nbsp; public boolean requestRouteToHost(int hostAddress) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (mInterfaceName != null &amp;&amp; hostAddress != -1) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (DBG) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log.d(TAG, "Requested host route to " + Integer.toHexString(hostAddress));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NetworkUtils.addHostRoute(mInterfaceName, hostAddress) == 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<p>Notice the NetworkUtils.addHostRoute() call. This will add a host route into the system's routing table for the specified destination address via the mobile WWAN interface. This enables the scenario where you want your MMS go through a specific APN for MMS while other traffic on another APN. As of Android SDK 1.5, only MobileDataStateTracker class will actually does this--the WiFiStateTracker class does not do anything yet at this point. </p>
]]></content:encoded>
    </item>
  </channel>
</rss>