<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">


























































<html>

  <head>
    <title>Redirecting...</title>
    <meta http-equiv="refresh" content="0;url=/sdk/android-1.5-highlights.html">
    <link href="/assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
  </head>

<body class="gc-documentation">
<a name="top"></a>

  <div id="header">
      <div id="headerLeft">
          <a href="/index.html" tabindex="-1"><img
              src="/assets/images/bg_logo.png" alt="Android Developers" /></a>
          <ul class="sdk">
              <li id="home-link"><a href="/index.html">
                  <span>Home</span></a></li>
              <li id="sdk-link"><a href="/sdk/1.5_r1/index.html"><span>SDK</span></a></li>
              <li id="guide-link"><a href="/guide/index.html"
                                  onClick="return loadLast('guide')"><span>Dev Guide</span></a></li>
              <li id="reference-link"><a href="/reference/packages.html" 
                                  onClick="return loadLast('reference')"><span>Reference</span></a></li>
              <li><a href="http://android-developers.blogspot.com"><span>Blog</span></a></li>
              <li id="community-link"><a href="/community/index.html"><span>Community</span></a></li>
          </ul>
      </div>
      <div id="headerRight">
          <div id="headerLinks">
            <!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
            <span class="text">
              <!-- &nbsp;<a href="#">English</a> | -->
              <a href="http://www.android.com">Android.com</a>
            </span>
          </div>
  <div id="search" >
      <div id="searchForm">
          <form accept-charset="utf-8" class="gsc-search-box" 
                onsubmit="return submit_search()">
            <table class="gsc-search-box" cellpadding="0" cellspacing="0"><tbody>
                <tr>
                  <td class="gsc-input">
                    <input id="search_autocomplete" class="gsc-input" type="text" size="33" autocomplete="off" 
                      title="search developer docs" name="q"
                      value="search developer docs" 
                      onFocus="search_focus_changed(this, true)" 
                      onBlur="search_focus_changed(this, false)" 
                      onkeydown="return search_changed(event, true, '/')" 
                      onkeyup="return search_changed(event, false, '/')" />
                  <div id="search_filtered_div" class="no-display">
                      <table id="search_filtered" cellspacing=0>
                      </table>
                  </div>
                  </td>
                  <td class="gsc-search-button">
                    <input type="submit" value="Search" title="search" id="search-button" class="gsc-search-button" />
                  </td>
                  <td class="gsc-clear-button">
                    <div title="clear results" class="gsc-clear-button">&nbsp;</div>
                  </td>
                </tr></tbody>
              </table>
          </form>
      </div><!-- searchForm -->
  </div><!-- search -->
      </div><!-- headerRight -->
  </div><!-- header -->


  <div class="g-section g-tpl-240" id="body-content">
    <div class="g-unit g-first not-resizable" id="side-nav">
      <div id="devdoc-nav">
<ul>
  <li>
    <h2>Current SDK Release</h2>
    <ul>
      <li><a href="/sdk/1.5_r3/index.html">Download</a></li>
      <li><a href="/sdk/1.5_r3/installing.html">Installing</a></li>
      <li><a href="/sdk/1.5_r3/upgrading.html">Upgrading</a></li>
      <li><a href="/sdk/1.5_r3/requirements.html">System Requirements</a></li>
    </ul>
    <ul>
      <li><a href="/sdk/terms.html">SDK Terms and Conditions</a></li>
      <li><a href="/sdk/RELEASENOTES.html">SDK Release Notes</a></li>
    </ul>
  <li>
    <h2>System Image Version Notes</h2>
    <ul>
      <li><a href="/sdk/android-1.5.html">Android 1.5 Version Notes</a></li>
      <li><a href="/sdk/android-1.1.html">Android 1.1 Version Notes</a></li>
    </ul>
  </li>
  <li>
    <h2>Previous SDK Releases</h2>
    <ul>
      <li><a href="/sdk/1.1_r1/index.html">Android 1.1 SDK, r1</a></li>
      <li><a href="/sdk/1.0_r2/index.html">Android 1.0 SDK, r2</a></li>
      <li><a href="/sdk/older_releases.html">Other Releases</a></li>
    </ul>
  </li>
</ul>

<script type="text/javascript">
<!--
    buildToggleLists();
//-->
</script>
      </div>
    </div> <!-- end side-nav -->



<div class="g-unit">
  <div id="jd-content">
    <p>Redirecting to 
    <a href="/sdk/android-1.5-highlights.html">
    /sdk/android-1.5-highlights.html
    </a></p>

</div><!-- end jd-content -->



</div><!-- end doc-content -->

</div> <!-- end body-content --> 

</body>
</html>



