1<!DOCTYPE html> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105<html> 106<head> 107<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 108 109<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> 110<title>GCMRegistrar | Android Developers</title> 111 112<!-- STYLESHEETS --> 113<link rel="stylesheet" 114href="//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto"> 115<link href="/assets/css/default.css" rel="stylesheet" type="text/css"> 116 117 118 119<!-- JAVASCRIPT --> 120<script src="//www.google.com/jsapi" type="text/javascript"></script> 121<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script> 122<script type="text/javascript"> 123 var toRoot = "/"; 124 125 var devsite = false; 126 127</script> 128<script src="/assets/js/docs.js" type="text/javascript"></script> 129 130<script src="/gms_navtree_data.js" type="text/javascript"></script> 131<script src="/gcm_navtree_data.js" type="text/javascript"></script> 132 133 134<script type="text/javascript"> 135 var _gaq = _gaq || []; 136 _gaq.push(['_setAccount', 'UA-5831155-1']); 137 _gaq.push(['_trackPageview']); 138 139 (function() { 140 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 141 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 142 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 143 })(); 144</script> 145</head> 146<body class="gc-documentation google 147 develop" itemscope itemtype="http://schema.org/Article"> 148 <div id="doc-api-level" class="" style="display:none"></div> 149 <a name="top"></a> 150 151 152 <!-- Header --> 153 <div id="header"> 154 <div class="wrap" id="header-wrap"> 155 <div class="col-3 logo"> 156 <a href="/index.html"> 157 <img src="/assets/images/dac_logo.png" width="123" height="25" alt="Android Developers" /> 158 </a> 159 <div class="btn-quicknav" id="btn-quicknav"> 160 <a href="#" class="arrow-inactive">Quicknav</a> 161 <a href="#" class="arrow-active">Quicknav</a> 162 </div> 163 </div> 164 <ul class="nav-x col-9"> 165 <li class="design"> 166 <a href="/design/index.html" 167 zh-TW-lang="設計" 168 zh-CN-lang="设计" 169 ru-lang="Проектирование" 170 ko-lang="디자인" 171 ja-lang="設計" 172 es-lang="Diseñar" 173 >Design</a></li> 174 <li class="develop"><a href="/develop/index.html" class="selected" 175 zh-TW-lang="開發" 176 zh-CN-lang="开发" 177 ru-lang="Разработка" 178 ko-lang="개발" 179 ja-lang="開発" 180 es-lang="Desarrollar" 181 >Develop</a></li> 182 <li class="distribute last"><a href="/distribute/index.html" 183 zh-TW-lang="發佈" 184 zh-CN-lang="分发" 185 ru-lang="Распространение" 186 ko-lang="배포" 187 ja-lang="配布" 188 es-lang="Distribuir" 189 >Distribute</a></li> 190 </ul> 191 192 <!-- New Search --> 193 <div class="menu-container"> 194 <div class="moremenu"> 195 <div id="more-btn"></div> 196 </div> 197 <div class="morehover" id="moremenu"> 198 <div class="top"></div> 199 <div class="mid"> 200 <div class="header">Links</div> 201 <ul> 202 <li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li> 203 <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li> 204 <li><a href="/about/index.html">About Android</a></li> 205 </ul> 206 <div class="header">Android Sites</div> 207 <ul> 208 <li><a href="http://www.android.com">Android.com</a></li> 209 <li class="active"><a>Android Developers</a></li> 210 <li><a href="http://source.android.com">Android Open Source Project</a></li> 211 </ul> 212 213 214 215 216 <div class="header">Language</div> 217 <div id="language" class="locales"> 218 <select name="language" onChange="changeLangPref(this.value, true)"> 219 <option value="en">English</option> 220 <option value="es">Español</option> 221 <option value="ja">日本語</option> 222 <option value="ko">한국어</option> 223 <option value="ru">Русский</option> 224 <option value="zh-CN">中文 (中国)</option> 225 <option value="zh-TW">中文 (台灣)</option> 226 </select> 227 </div> 228 <script type="text/javascript"> 229 <!-- 230 loadLangPref(); 231 //--> 232 </script> 233 234 235 236 237 <br class="clearfix" /> 238 </div> 239 <div class="bottom"></div> 240 </div> 241 <div class="search" id="search-container"> 242 <div class="search-inner"> 243 <div id="search-btn"></div> 244 <div class="left"></div> 245 <form onsubmit="return submit_search()"> 246 <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q" 247onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)" 248onkeydown="return search_changed(event, true, '/')" 249onkeyup="return search_changed(event, false, '/')" /> 250 </form> 251 <div class="right"></div> 252 <a class="close hide">close</a> 253 <div class="left"></div> 254 <div class="right"></div> 255 </div> 256 </div> 257 <div id="search_filtered_wrapper"> 258 <div id="search_filtered_div" class="no-display"> 259 <ul id="search_filtered"> 260 </ul> 261 </div> 262 </div> 263 264 </div> 265 <!-- /New Search> 266 267 268 <!-- Expanded quicknav --> 269 <div id="quicknav" class="col-9"> 270 <ul> 271 <li class="design"> 272 <ul> 273 <li><a href="/design/index.html">Get Started</a></li> 274 <li><a href="/design/style/index.html">Style</a></li> 275 <li><a href="/design/patterns/index.html">Patterns</a></li> 276 <li><a href="/design/building-blocks/index.html">Building Blocks</a></li> 277 <li><a href="/design/downloads/index.html">Downloads</a></li> 278 <li><a href="/design/videos/index.html">Videos</a></li> 279 </ul> 280 </li> 281 <li class="develop"> 282 <ul> 283 <li><a href="/training/index.html" 284 zh-TW-lang="訓練課程" 285 zh-CN-lang="培训" 286 ru-lang="Курсы" 287 ko-lang="교육" 288 ja-lang="トレーニング" 289 es-lang="Capacitación" 290 >Training</a></li> 291 <li><a href="/guide/components/index.html" 292 zh-TW-lang="API 指南" 293 zh-CN-lang="API 指南" 294 ru-lang="Руководства по API" 295 ko-lang="API 가이드" 296 ja-lang="API ガイド" 297 es-lang="Guías de la API" 298 >API Guides</a></li> 299 <li><a href="/reference/packages.html" 300 zh-TW-lang="參考資源" 301 zh-CN-lang="参考" 302 ru-lang="Справочник" 303 ko-lang="참조문서" 304 ja-lang="リファレンス" 305 es-lang="Referencia" 306 >Reference</a></li> 307 <li><a href="/tools/index.html" 308 zh-TW-lang="相關工具" 309 zh-CN-lang="工具" 310 ru-lang="Инструменты" 311 ko-lang="도구" 312 ja-lang="ツール" 313 es-lang="Herramientas" 314 >Tools</a> 315 <ul><li><a href="/sdk/index.html">Get the SDK</a></li></ul> 316 </li> 317 <li><a href="/google/index.html">Google Services</a> 318 </li> 319 </ul> 320 </li> 321 <li class="distribute last"> 322 <ul> 323 <li><a href="/distribute/index.html">Google Play</a></li> 324 <li><a href="/distribute/googleplay/publish/index.html">Publishing</a></li> 325 <li><a href="/distribute/googleplay/promote/index.html">Promoting</a></li> 326 <li><a href="/distribute/googleplay/quality/index.html">App Quality</a></li> 327 <li><a href="/distribute/googleplay/spotlight/index.html">Spotlight</a></li> 328 <li><a href="/distribute/open.html">Open Distribution</a></li> 329 </ul> 330 </li> 331 </ul> 332 </div> 333 <!-- /Expanded quicknav --> 334 </div> 335 </div> 336 <!-- /Header --> 337 338 339 <div id="searchResults" class="wrap" style="display:none;"> 340 <h2 id="searchTitle">Results</h2> 341 <div id="leftSearchControl" class="search-control">Loading...</div> 342 </div> 343 344 345 346 347 <!-- Secondary x-nav --> 348 <div id="nav-x"> 349 <div class="wrap"> 350 <ul class="nav-x col-9 develop" style="width:100%"> 351 <li><a href="/training/index.html" 352 zh-TW-lang="訓練課程" 353 zh-CN-lang="培训" 354 ru-lang="Курсы" 355 ko-lang="교육" 356 ja-lang="トレーニング" 357 es-lang="Capacitación" 358 >Training</a></li> 359 <li><a href="/guide/components/index.html" 360 zh-TW-lang="API 指南" 361 zh-CN-lang="API 指南" 362 ru-lang="Руководства по API" 363 ko-lang="API 가이드" 364 ja-lang="API ガイド" 365 es-lang="Guías de la API" 366 >API Guides</a></li> 367 <li><a href="/reference/packages.html" 368 zh-TW-lang="參考資源" 369 zh-CN-lang="参考" 370 ru-lang="Справочник" 371 ko-lang="참조문서" 372 ja-lang="リファレンス" 373 es-lang="Referencia" 374 >Reference</a></li> 375 <li><a href="/tools/index.html" 376 zh-TW-lang="相關工具" 377 zh-CN-lang="工具" 378 ru-lang="Инструменты" 379 ko-lang="도구" 380 ja-lang="ツール" 381 es-lang="Herramientas" 382 >Tools</a></li> 383 <li><a href="/google/index.html" class="selected" 384 >Google Services</a> 385 </li> 386 </ul> 387 </div> 388 389 </div> 390 <!-- /Sendondary x-nav --> 391 392 393 394 395 396 <div class="wrap clearfix" id="body-content"> 397 <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement"> 398 <div id="devdoc-nav" class="scroll-pane"> 399<a class="totop" href="#top" data-g-event="left-nav-top">to top</a> 400 401 402 403<ul id="nav"> 404 <li class="nav-section"> 405 <div class="nav-section-header empty"><a href="/google/index.html"> 406 <span class="en">Overview</span> 407 </a></div> 408 </li> 409 410 <li class="nav-section"> 411 <div class="nav-section-header"><a href="/google/play-services/index.html"> 412 <span class="en">Google Play Services</span></a> 413 </div> 414 <ul> 415 <li><a href="/google/play-services/setup.html"> 416 <span class="en">Setup</span></a> 417 </li> 418 419 <li><a href="/google/play-services/auth.html"> 420 <span class="en">Authentication</span></a> 421 </li> 422 423 <li><a href="/google/play-services/plus.html"> 424 <span class="en">Google+</span></a> 425 </li> 426 427 <li><a href="/google/play-services/maps.html"> 428 <span class="en">Google Maps</span></a> 429 </li> 430 431 <li id="gms-tree-list" class="nav-section"> 432 <div class="nav-section-header"> 433 <a href="/reference/gms-packages.html"> 434 <span class="en">Reference</span> 435 </a> 436 <div> 437 </li> 438 439 </ul> 440 </li> 441 442 443 <li class="nav-section"> 444 <div class="nav-section-header"><a href="/google/play/billing/index.html"> 445 <span class="en">Google Play In-app Billing</span></a> 446 </div> 447 <ul> 448 <li><a href="/google/play/billing/billing_overview.html"> 449 <span class="en">Overview</span></a> 450 </li> 451 <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html"> 452 <span class="en">Version 3 API</span></a></div> 453 <ul> 454 <li><a href="/google/play/billing/billing_integrate.html"> 455 <span class="en">Implementing the API</span></a></li> 456 <li><a href="/google/play/billing/billing_reference.html"> 457 <span class="en">Reference</span></a></li> 458 </ul> 459 </li> 460 <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html"> 461 <span class="en">Version 2 API</span></a></div> 462 <ul> 463 <li><a href="/google/play/billing/v2/billing_integrate.html"> 464 <span class="en">Implementing the API</span></a></li> 465 <li><a href="/google/play/billing/v2/billing_subscriptions.html"> 466 <span class="en">Subscriptions</span></a></li> 467 <li><a href="/google/play/billing/v2/billing_reference.html"> 468 <span class="en">Reference</span></a></li> 469 </ul> 470 </li> 471 <li><a href="/google/play/billing/billing_best_practices.html"> 472 <span class="en">Security and Design</span></a> 473 </li> 474 <li><a href="/google/play/billing/billing_testing.html"> 475 <span class="en">Testing In-app Billing</span></a> 476 </li> 477 <li><a href="/google/play/billing/billing_admin.html"> 478 <span class="en">Administering In-app Billing</span></a> 479 </li> 480 <li><a href="/google/play/billing/versions.html"> 481 <span class="en">Version Notes</span></a> 482 </li> 483 </ul> 484 </li> 485 486 <li class="nav-section"> 487 <div class="nav-section-header"><a href="/google/play/dist.html"> 488 <span class="en">Google Play Distribution</span></a> 489 </div> 490 <ul> 491 <li><a href="/google/play/filters.html"> 492 <span class="en">Filters on Google Play</span></a> 493 </li> 494 495 <li><a href="/google/play/publishing/multiple-apks.html"> 496 <span class="en">Multiple APK Support</span></a> 497 </li> 498 <li><a href="/google/play/expansion-files.html"> 499 <span class="en">APK Expansion Files</span></a> 500 </li> 501 <li class="nav-section"> 502 <div class="nav-section-header"><a href="/google/play/licensing/index.html"> 503 <span class="en">Application Licensing</span></a> 504 </div> 505 <ul> 506 <li><a href="/google/play/licensing/overview.html"> 507 <span class="en">Licensing Overview</span></a> 508 </li> 509 <li><a href="/google/play/licensing/setting-up.html"> 510 <span class="en">Setting Up for Licensing</span></a> 511 </li> 512 <li><a href="/google/play/licensing/adding-licensing.html"> 513 <span class="en">Adding Licensing to Your App</span></a> 514 </li> 515 <li><a href="/google/play/licensing/licensing-reference.html"> 516 <span class="en">Licensing Reference</span></a> 517 </li> 518 </ul> 519 </li> 520 </ul> 521 </li> 522 523 <li class="nav-section"> 524 <div class="nav-section-header"><a href="/google/gcm/index.html"> 525 <span class="en">Google Cloud Messaging</span></a> 526 </div> 527 <ul> 528 <li><a href="/google/gcm/gs.html"> 529 <span class="en">Getting Started</span></a> 530 </li> 531 <li><a href="/google/gcm/gcm.html"> 532 <span class="en">Architectural Overview</span></a> 533 </li> 534 <li><a href="/google/gcm/demo.html"> 535 <span class="en">Demo App Tutorial</span></a> 536 </li> 537 <li><a href="/google/gcm/adv.html"> 538 <span class="en">Advanced Topics</span></a> 539 </li> 540 <li><a href="/google/gcm/c2dm.html"> 541 <span class="en">Migration</span></a> 542 </li> 543 <li id="gcm-tree-list" class="nav-section"> 544 <div class="nav-section-header"> 545 <a href="/reference/gcm-packages.html"> 546 <span class="en">Reference</span> 547 </a> 548 <div> 549 </li> 550 </ul> 551 </li> 552 553 554 <li class="nav-section"> 555 <div class="nav-section-header"><a href="/google/backup/index.html"> 556 Android Backup Service</a> 557 </div> 558 <ul> 559 <li><a href="/google/backup/signup.html"> 560 Register</a> 561 </li> 562 </ul> 563 </li> 564 565</ul> 566 567<script type="text/javascript"> 568<!-- 569 buildToggleLists(); 570 changeNavLang(getLangPref()); 571//--> 572</script> 573 574 575 576 577 </div> 578 <script type="text/javascript"> 579 showGoogleRefTree(); 580 581 </script> 582 583 </div> <!-- end side-nav --> 584 <script> 585 $(document).ready(function() { 586 scrollIntoView("devdoc-nav"); 587 }); 588 </script> 589 590 591 592 593 594 595<div class="col-12" id="doc-col"> 596 597<div id="api-info-block"> 598 599 600 601 602 603 604 605 606 607 608 609<div class="sum-details-links"> 610 611Summary: 612 613 614 615 616 617 <a href="#constants">Constants</a> 618 619 620 621 622 623 624 625 626 | <a href="#pubmethods">Methods</a> 627 628 629 630 631 | <a href="#inhmethods">Inherited Methods</a> 632 633| <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a> 634 635</div><!-- end sum-details-links --> 636<div class="api-level"> 637 638 639 640 641</div> 642</div><!-- end api-info-block --> 643 644 645<!-- ======== START OF CLASS DATA ======== --> 646 647<div id="jd-header"> 648 public 649 650 final 651 652 class 653<h1 itemprop="name">GCMRegistrar</h1> 654 655 656 657 658 extends Object<br/> 659 660 661 662 663 664 665 666 667 668</div><!-- end header --> 669 670<div id="naMessage"></div> 671 672<div id="jd-content" class="api apilevel-"> 673<table class="jd-inheritance-table"> 674 675 676 <tr> 677 678 <td colspan="2" class="jd-inheritance-class-cell">java.lang.Object</td> 679 </tr> 680 681 682 <tr> 683 684 <td class="jd-inheritance-space"> ↳</td> 685 686 <td colspan="1" class="jd-inheritance-class-cell">com.google.android.gcm.GCMRegistrar</td> 687 </tr> 688 689 690</table> 691 692 693 694 695 696 697 698<div class="jd-descr"> 699 700 701<h2>Class Overview</h2> 702<p itemprop="articleBody">Utilities for device registration. 703 <p> 704 <strong>Note:</strong> this class uses a private <code><a href="/reference/android/content/SharedPreferences.html">SharedPreferences</a></code> 705 object to keep track of the registration token. 706</p> 707 708 709 710 711 712</div><!-- jd-descr --> 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729<div class="jd-descr"> 730 731 732<h2>Summary</h2> 733 734 735 736 737 738 739 740 741 742 743 744 745 746<!-- =========== ENUM CONSTANT SUMMARY =========== --> 747<table id="constants" class="jd-sumtable"><tr><th colspan="12">Constants</th></tr> 748 749 750 751 <tr class="alt-color api apilevel-" > 752 <td class="jd-typecol">long</td> 753 <td class="jd-linkcol"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS">DEFAULT_ON_SERVER_LIFESPAN_MS</a></td> 754 <td class="jd-descrcol" width="100%">Default lifespan (7 days) of the <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(android.content.Context)">isRegisteredOnServer(Context)</a></code> 755 flag until it is considered expired.</td> 756 </tr> 757 758 759 760</table> 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777<!-- ========== METHOD SUMMARY =========== --> 778<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr> 779 780 781 782 783 <tr class="alt-color api apilevel-" > 784 <td class="jd-typecol"><nobr> 785 786 787 788 static 789 790 void</nobr> 791 </td> 792 <td class="jd-linkcol" width="100%"><nobr> 793 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#checkDevice(android.content.Context)">checkDevice</a></span>(Context context)</nobr> 794 795 <div class="jd-descrdiv">Checks if the device has the proper dependencies installed.</div> 796 797 </td></tr> 798 799 800 801 <tr class=" api apilevel-" > 802 <td class="jd-typecol"><nobr> 803 804 805 806 static 807 808 void</nobr> 809 </td> 810 <td class="jd-linkcol" width="100%"><nobr> 811 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#checkManifest(android.content.Context)">checkManifest</a></span>(Context context)</nobr> 812 813 <div class="jd-descrdiv">Checks that the application manifest is properly configured.</div> 814 815 </td></tr> 816 817 818 819 <tr class="alt-color api apilevel-" > 820 <td class="jd-typecol"><nobr> 821 822 823 824 static 825 826 long</nobr> 827 </td> 828 <td class="jd-linkcol" width="100%"><nobr> 829 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#getRegisterOnServerLifespan(android.content.Context)">getRegisterOnServerLifespan</a></span>(Context context)</nobr> 830 831 <div class="jd-descrdiv">Gets how long (in milliseconds) the <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegistered(android.content.Context)">isRegistered(Context)</a></code> 832 property is valid.</div> 833 834 </td></tr> 835 836 837 838 <tr class=" api apilevel-" > 839 <td class="jd-typecol"><nobr> 840 841 842 843 static 844 845 String</nobr> 846 </td> 847 <td class="jd-linkcol" width="100%"><nobr> 848 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#getRegistrationId(android.content.Context)">getRegistrationId</a></span>(Context context)</nobr> 849 850 <div class="jd-descrdiv">Gets the current registration id for application on GCM service.</div> 851 852 </td></tr> 853 854 855 856 <tr class="alt-color api apilevel-" > 857 <td class="jd-typecol"><nobr> 858 859 860 861 static 862 863 boolean</nobr> 864 </td> 865 <td class="jd-linkcol" width="100%"><nobr> 866 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegistered(android.content.Context)">isRegistered</a></span>(Context context)</nobr> 867 868 <div class="jd-descrdiv">Checks whether the application was successfully registered on GCM 869 service.</div> 870 871 </td></tr> 872 873 874 875 <tr class=" api apilevel-" > 876 <td class="jd-typecol"><nobr> 877 878 879 880 static 881 882 boolean</nobr> 883 </td> 884 <td class="jd-linkcol" width="100%"><nobr> 885 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(android.content.Context)">isRegisteredOnServer</a></span>(Context context)</nobr> 886 887 <div class="jd-descrdiv">Checks whether the device was successfully registered in the server side, 888 as set by <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(android.content.Context, boolean)">setRegisteredOnServer(Context, boolean)</a></code>.</div> 889 890 </td></tr> 891 892 893 894 <tr class="alt-color api apilevel-" > 895 <td class="jd-typecol"><nobr> 896 897 synchronized 898 899 static 900 901 void</nobr> 902 </td> 903 <td class="jd-linkcol" width="100%"><nobr> 904 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#onDestroy(android.content.Context)">onDestroy</a></span>(Context context)</nobr> 905 906 <div class="jd-descrdiv">Clear internal resources.</div> 907 908 </td></tr> 909 910 911 912 <tr class=" api apilevel-" > 913 <td class="jd-typecol"><nobr> 914 915 916 917 static 918 919 void</nobr> 920 </td> 921 <td class="jd-linkcol" width="100%"><nobr> 922 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#register(android.content.Context, java.lang.String...)">register</a></span>(Context context, String... senderIds)</nobr> 923 924 <div class="jd-descrdiv">Initiate messaging registration for the current application.</div> 925 926 </td></tr> 927 928 929 930 <tr class="alt-color api apilevel-" > 931 <td class="jd-typecol"><nobr> 932 933 934 935 static 936 937 void</nobr> 938 </td> 939 <td class="jd-linkcol" width="100%"><nobr> 940 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#setRegisterOnServerLifespan(android.content.Context, long)">setRegisterOnServerLifespan</a></span>(Context context, long lifespan)</nobr> 941 942 <div class="jd-descrdiv">Sets how long (in milliseconds) the <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegistered(android.content.Context)">isRegistered(Context)</a></code> 943 flag is valid.</div> 944 945 </td></tr> 946 947 948 949 <tr class=" api apilevel-" > 950 <td class="jd-typecol"><nobr> 951 952 953 954 static 955 956 void</nobr> 957 </td> 958 <td class="jd-linkcol" width="100%"><nobr> 959 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(android.content.Context, boolean)">setRegisteredOnServer</a></span>(Context context, boolean flag)</nobr> 960 961 <div class="jd-descrdiv">Sets whether the device was successfully registered in the server side.</div> 962 963 </td></tr> 964 965 966 967 <tr class="alt-color api apilevel-" > 968 <td class="jd-typecol"><nobr> 969 970 971 972 static 973 974 void</nobr> 975 </td> 976 <td class="jd-linkcol" width="100%"><nobr> 977 <span class="sympad"><a href="/reference/com/google/android/gcm/GCMRegistrar.html#unregister(android.content.Context)">unregister</a></span>(Context context)</nobr> 978 979 <div class="jd-descrdiv">Unregister the application.</div> 980 981 </td></tr> 982 983 984 985</table> 986 987 988 989 990 991 992 993<!-- ========== METHOD SUMMARY =========== --> 994<table id="inhmethods" class="jd-sumtable"><tr><th> 995 <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a> 996 <div style="clear:left;">Inherited Methods</div></th></tr> 997 998 999<tr class="api apilevel-" > 1000<td colspan="12"> 1001 <a href="#" onclick="return toggleInherited(this, null)" id="inherited-methods-java.lang.Object" class="jd-expando-trigger closed" 1002 ><img id="inherited-methods-java.lang.Object-trigger" 1003 src="/assets/images/triangle-closed.png" 1004 class="jd-expando-trigger-img" /></a> 1005From class 1006 1007 java.lang.Object 1008 1009<div id="inherited-methods-java.lang.Object"> 1010 <div id="inherited-methods-java.lang.Object-list" 1011 class="jd-inheritedlinks"> 1012 </div> 1013 <div id="inherited-methods-java.lang.Object-summary" style="display: none;"> 1014 <table class="jd-sumtable-expando"> 1015 1016 1017 1018 1019 <tr class="alt-color api apilevel-" > 1020 <td class="jd-typecol"><nobr> 1021 1022 1023 1024 1025 1026 Object</nobr> 1027 </td> 1028 <td class="jd-linkcol" width="100%"><nobr> 1029 <span class="sympad">clone</span>()</nobr> 1030 1031 </td></tr> 1032 1033 1034 1035 <tr class=" api apilevel-" > 1036 <td class="jd-typecol"><nobr> 1037 1038 1039 1040 1041 1042 boolean</nobr> 1043 </td> 1044 <td class="jd-linkcol" width="100%"><nobr> 1045 <span class="sympad">equals</span>(Object arg0)</nobr> 1046 1047 </td></tr> 1048 1049 1050 1051 <tr class="alt-color api apilevel-" > 1052 <td class="jd-typecol"><nobr> 1053 1054 1055 1056 1057 1058 void</nobr> 1059 </td> 1060 <td class="jd-linkcol" width="100%"><nobr> 1061 <span class="sympad">finalize</span>()</nobr> 1062 1063 </td></tr> 1064 1065 1066 1067 <tr class=" api apilevel-" > 1068 <td class="jd-typecol"><nobr> 1069 1070 1071 final 1072 1073 1074 Class<?></nobr> 1075 </td> 1076 <td class="jd-linkcol" width="100%"><nobr> 1077 <span class="sympad">getClass</span>()</nobr> 1078 1079 </td></tr> 1080 1081 1082 1083 <tr class="alt-color api apilevel-" > 1084 <td class="jd-typecol"><nobr> 1085 1086 1087 1088 1089 1090 int</nobr> 1091 </td> 1092 <td class="jd-linkcol" width="100%"><nobr> 1093 <span class="sympad">hashCode</span>()</nobr> 1094 1095 </td></tr> 1096 1097 1098 1099 <tr class=" api apilevel-" > 1100 <td class="jd-typecol"><nobr> 1101 1102 1103 final 1104 1105 1106 void</nobr> 1107 </td> 1108 <td class="jd-linkcol" width="100%"><nobr> 1109 <span class="sympad">notify</span>()</nobr> 1110 1111 </td></tr> 1112 1113 1114 1115 <tr class="alt-color api apilevel-" > 1116 <td class="jd-typecol"><nobr> 1117 1118 1119 final 1120 1121 1122 void</nobr> 1123 </td> 1124 <td class="jd-linkcol" width="100%"><nobr> 1125 <span class="sympad">notifyAll</span>()</nobr> 1126 1127 </td></tr> 1128 1129 1130 1131 <tr class=" api apilevel-" > 1132 <td class="jd-typecol"><nobr> 1133 1134 1135 1136 1137 1138 String</nobr> 1139 </td> 1140 <td class="jd-linkcol" width="100%"><nobr> 1141 <span class="sympad">toString</span>()</nobr> 1142 1143 </td></tr> 1144 1145 1146 1147 <tr class="alt-color api apilevel-" > 1148 <td class="jd-typecol"><nobr> 1149 1150 1151 final 1152 1153 1154 void</nobr> 1155 </td> 1156 <td class="jd-linkcol" width="100%"><nobr> 1157 <span class="sympad">wait</span>()</nobr> 1158 1159 </td></tr> 1160 1161 1162 1163 <tr class=" api apilevel-" > 1164 <td class="jd-typecol"><nobr> 1165 1166 1167 final 1168 1169 1170 void</nobr> 1171 </td> 1172 <td class="jd-linkcol" width="100%"><nobr> 1173 <span class="sympad">wait</span>(long arg0, int arg1)</nobr> 1174 1175 </td></tr> 1176 1177 1178 1179 <tr class="alt-color api apilevel-" > 1180 <td class="jd-typecol"><nobr> 1181 1182 1183 final 1184 1185 1186 void</nobr> 1187 </td> 1188 <td class="jd-linkcol" width="100%"><nobr> 1189 <span class="sympad">wait</span>(long arg0)</nobr> 1190 1191 </td></tr> 1192 1193 1194</table> 1195 </div> 1196</div> 1197</td></tr> 1198 1199 1200</table> 1201 1202 1203</div><!-- jd-descr (summary) --> 1204 1205<!-- Details --> 1206 1207 1208 1209 1210 1211 1212 1213 1214<!-- XML Attributes --> 1215 1216 1217<!-- Enum Values --> 1218 1219 1220<!-- Constants --> 1221 1222 1223<!-- ========= ENUM CONSTANTS DETAIL ======== --> 1224<h2>Constants</h2> 1225 1226 1227 1228 1229<A NAME="DEFAULT_ON_SERVER_LIFESPAN_MS"></A> 1230 1231<div class="jd-details api apilevel-"> 1232 <h4 class="jd-details-title"> 1233 <span class="normal"> 1234 public 1235 static 1236 final 1237 long 1238 </span> 1239 DEFAULT_ON_SERVER_LIFESPAN_MS 1240 </h4> 1241 <div class="api-level"> 1242 1243 1244 1245 1246 </div> 1247 <div class="jd-details-descr"> 1248 1249 <div class="jd-tagdata jd-tagdescr"><p>Default lifespan (7 days) of the <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(android.content.Context)">isRegisteredOnServer(Context)</a></code> 1250 flag until it is considered expired. 1251</p></div> 1252 1253 1254 <div class="jd-tagdata"> 1255 <span class="jd-tagtitle">Constant Value: </span> 1256 <span> 1257 1258 604800000 1259 (0x00000000240c8400) 1260 1261 </span> 1262 </div> 1263 1264 </div> 1265</div> 1266 1267 1268 1269 1270<!-- Fields --> 1271 1272 1273<!-- Public ctors --> 1274 1275 1276 1277<!-- ========= CONSTRUCTOR DETAIL ======== --> 1278<!-- Protected ctors --> 1279 1280 1281 1282<!-- ========= METHOD DETAIL ======== --> 1283<!-- Public methdos --> 1284 1285<h2>Public Methods</h2> 1286 1287 1288 1289<A NAME="checkDevice(android.content.Context)"></A> 1290 1291<div class="jd-details api apilevel-"> 1292 <h4 class="jd-details-title"> 1293 <span class="normal"> 1294 public 1295 static 1296 1297 1298 1299 void 1300 </span> 1301 <span class="sympad">checkDevice</span> 1302 <span class="normal">(Context context)</span> 1303 </h4> 1304 <div class="api-level"> 1305 <div></div> 1306 1307 1308 1309 </div> 1310 <div class="jd-details-descr"> 1311 1312 <div class="jd-tagdata jd-tagdescr"><p>Checks if the device has the proper dependencies installed. 1313 <p> 1314 This method should be called when the application starts to verify that 1315 the device supports GCM.</p></div> 1316 <div class="jd-tagdata"> 1317 <h5 class="jd-tagtitle">Parameters</h5> 1318 <table class="jd-tagtable"> 1319 <tr> 1320 <th>context</td> 1321 <td>application context.</td> 1322 </tr> 1323 </table> 1324 </div> 1325 <div class="jd-tagdata"> 1326 <h5 class="jd-tagtitle">Throws</h5> 1327 <table class="jd-tagtable"> 1328 <tr> 1329 <th>UnsupportedOperationException</td> 1330 <td>if the device does not support GCM. 1331</td> 1332 </tr> 1333 </table> 1334 </div> 1335 1336 </div> 1337</div> 1338 1339 1340<A NAME="checkManifest(android.content.Context)"></A> 1341 1342<div class="jd-details api apilevel-"> 1343 <h4 class="jd-details-title"> 1344 <span class="normal"> 1345 public 1346 static 1347 1348 1349 1350 void 1351 </span> 1352 <span class="sympad">checkManifest</span> 1353 <span class="normal">(Context context)</span> 1354 </h4> 1355 <div class="api-level"> 1356 <div></div> 1357 1358 1359 1360 </div> 1361 <div class="jd-details-descr"> 1362 1363 <div class="jd-tagdata jd-tagdescr"><p>Checks that the application manifest is properly configured. 1364 <p> 1365 A proper configuration means: 1366 <ol> 1367 <li>It creates a custom permission called 1368 <code>PACKAGE_NAME.permission.C2D_MESSAGE</code>. 1369 <li>It defines at least one <code><a href="/reference/android/content/BroadcastReceiver.html">BroadcastReceiver</a></code> with category 1370 <code>PACKAGE_NAME</code>. 1371 <li>The <code><a href="/reference/android/content/BroadcastReceiver.html">BroadcastReceiver</a></code>(s) uses the 1372 <code><a href="/reference/com/google/android/gcm/GCMConstants.html#PERMISSION_GCM_INTENTS">com.google.android.gcm.GCMConstants.PERMISSION_GCM_INTENTS</a></code> 1373 permission. 1374 <li>The <code><a href="/reference/android/content/BroadcastReceiver.html">BroadcastReceiver</a></code>(s) handles the 2 GCM intents 1375 (<code><a href="/reference/com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_MESSAGE</a></code> 1376 and 1377 <code><a href="/reference/com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_REGISTRATION_CALLBACK</a></code>). 1378 </ol> 1379 ...where <code>PACKAGE_NAME</code> is the application package. 1380 <p> 1381 This method should be used during development time to verify that the 1382 manifest is properly set up, but it doesn't need to be called once the 1383 application is deployed to the users' devices.</p></div> 1384 <div class="jd-tagdata"> 1385 <h5 class="jd-tagtitle">Parameters</h5> 1386 <table class="jd-tagtable"> 1387 <tr> 1388 <th>context</td> 1389 <td>application context.</td> 1390 </tr> 1391 </table> 1392 </div> 1393 <div class="jd-tagdata"> 1394 <h5 class="jd-tagtitle">Throws</h5> 1395 <table class="jd-tagtable"> 1396 <tr> 1397 <th>IllegalStateException</td> 1398 <td>if any of the conditions above is not met. 1399</td> 1400 </tr> 1401 </table> 1402 </div> 1403 1404 </div> 1405</div> 1406 1407 1408<A NAME="getRegisterOnServerLifespan(android.content.Context)"></A> 1409 1410<div class="jd-details api apilevel-"> 1411 <h4 class="jd-details-title"> 1412 <span class="normal"> 1413 public 1414 static 1415 1416 1417 1418 long 1419 </span> 1420 <span class="sympad">getRegisterOnServerLifespan</span> 1421 <span class="normal">(Context context)</span> 1422 </h4> 1423 <div class="api-level"> 1424 <div></div> 1425 1426 1427 1428 </div> 1429 <div class="jd-details-descr"> 1430 1431 <div class="jd-tagdata jd-tagdescr"><p>Gets how long (in milliseconds) the <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegistered(android.content.Context)">isRegistered(Context)</a></code> 1432 property is valid.</p></div> 1433 <div class="jd-tagdata"> 1434 <h5 class="jd-tagtitle">Returns</h5> 1435 <ul class="nolist"><li>value set by <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(android.content.Context, boolean)">setRegisteredOnServer(Context, boolean)</a></code> or 1436 <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS">DEFAULT_ON_SERVER_LIFESPAN_MS</a></code> if not set. 1437</li></ul> 1438 </div> 1439 1440 </div> 1441</div> 1442 1443 1444<A NAME="getRegistrationId(android.content.Context)"></A> 1445 1446<div class="jd-details api apilevel-"> 1447 <h4 class="jd-details-title"> 1448 <span class="normal"> 1449 public 1450 static 1451 1452 1453 1454 String 1455 </span> 1456 <span class="sympad">getRegistrationId</span> 1457 <span class="normal">(Context context)</span> 1458 </h4> 1459 <div class="api-level"> 1460 <div></div> 1461 1462 1463 1464 </div> 1465 <div class="jd-details-descr"> 1466 1467 <div class="jd-tagdata jd-tagdescr"><p>Gets the current registration id for application on GCM service. 1468 <p> 1469 If result is empty, the registration has failed.</p></div> 1470 <div class="jd-tagdata"> 1471 <h5 class="jd-tagtitle">Returns</h5> 1472 <ul class="nolist"><li>registration id, or empty string if the registration is not 1473 complete. 1474</li></ul> 1475 </div> 1476 1477 </div> 1478</div> 1479 1480 1481<A NAME="isRegistered(android.content.Context)"></A> 1482 1483<div class="jd-details api apilevel-"> 1484 <h4 class="jd-details-title"> 1485 <span class="normal"> 1486 public 1487 static 1488 1489 1490 1491 boolean 1492 </span> 1493 <span class="sympad">isRegistered</span> 1494 <span class="normal">(Context context)</span> 1495 </h4> 1496 <div class="api-level"> 1497 <div></div> 1498 1499 1500 1501 </div> 1502 <div class="jd-details-descr"> 1503 1504 <div class="jd-tagdata jd-tagdescr"><p>Checks whether the application was successfully registered on GCM 1505 service. 1506</p></div> 1507 1508 </div> 1509</div> 1510 1511 1512<A NAME="isRegisteredOnServer(android.content.Context)"></A> 1513 1514<div class="jd-details api apilevel-"> 1515 <h4 class="jd-details-title"> 1516 <span class="normal"> 1517 public 1518 static 1519 1520 1521 1522 boolean 1523 </span> 1524 <span class="sympad">isRegisteredOnServer</span> 1525 <span class="normal">(Context context)</span> 1526 </h4> 1527 <div class="api-level"> 1528 <div></div> 1529 1530 1531 1532 </div> 1533 <div class="jd-details-descr"> 1534 1535 <div class="jd-tagdata jd-tagdescr"><p>Checks whether the device was successfully registered in the server side, 1536 as set by <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(android.content.Context, boolean)">setRegisteredOnServer(Context, boolean)</a></code>. 1537 1538 <p>To avoid the scenario where the device sends the registration to the 1539 server but the server loses it, this flag has an expiration date, which 1540 is <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS">DEFAULT_ON_SERVER_LIFESPAN_MS</a></code> by default (but can be changed 1541 by <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#setRegisterOnServerLifespan(android.content.Context, long)">setRegisterOnServerLifespan(Context, long)</a></code>). 1542</p></div> 1543 1544 </div> 1545</div> 1546 1547 1548<A NAME="onDestroy(android.content.Context)"></A> 1549 1550<div class="jd-details api apilevel-"> 1551 <h4 class="jd-details-title"> 1552 <span class="normal"> 1553 public 1554 static 1555 1556 1557 synchronized 1558 void 1559 </span> 1560 <span class="sympad">onDestroy</span> 1561 <span class="normal">(Context context)</span> 1562 </h4> 1563 <div class="api-level"> 1564 <div></div> 1565 1566 1567 1568 </div> 1569 <div class="jd-details-descr"> 1570 1571 <div class="jd-tagdata jd-tagdescr"><p>Clear internal resources. 1572 1573 <p> 1574 This method should be called by the main activity's <code>onDestroy()</code> 1575 method. 1576</p></div> 1577 1578 </div> 1579</div> 1580 1581 1582<A NAME="register(android.content.Context, java.lang.String...)"></A> 1583 1584<div class="jd-details api apilevel-"> 1585 <h4 class="jd-details-title"> 1586 <span class="normal"> 1587 public 1588 static 1589 1590 1591 1592 void 1593 </span> 1594 <span class="sympad">register</span> 1595 <span class="normal">(Context context, String... senderIds)</span> 1596 </h4> 1597 <div class="api-level"> 1598 <div></div> 1599 1600 1601 1602 </div> 1603 <div class="jd-details-descr"> 1604 1605 <div class="jd-tagdata jd-tagdescr"><p>Initiate messaging registration for the current application. 1606 <p> 1607 The result will be returned as an 1608 <code><a href="/reference/com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">INTENT_FROM_GCM_REGISTRATION_CALLBACK</a></code> intent with 1609 either a <code><a href="/reference/com/google/android/gcm/GCMConstants.html#EXTRA_REGISTRATION_ID">EXTRA_REGISTRATION_ID</a></code> or 1610 <code><a href="/reference/com/google/android/gcm/GCMConstants.html#EXTRA_ERROR">EXTRA_ERROR</a></code>.</p></div> 1611 <div class="jd-tagdata"> 1612 <h5 class="jd-tagtitle">Parameters</h5> 1613 <table class="jd-tagtable"> 1614 <tr> 1615 <th>context</td> 1616 <td>application context.</td> 1617 </tr> 1618 <tr> 1619 <th>senderIds</td> 1620 <td>Google Project ID of the accounts authorized to send 1621 messages to this application.</td> 1622 </tr> 1623 </table> 1624 </div> 1625 <div class="jd-tagdata"> 1626 <h5 class="jd-tagtitle">Throws</h5> 1627 <table class="jd-tagtable"> 1628 <tr> 1629 <th>IllegalStateException</td> 1630 <td>if device does not have all GCM 1631 dependencies installed. 1632</td> 1633 </tr> 1634 </table> 1635 </div> 1636 1637 </div> 1638</div> 1639 1640 1641<A NAME="setRegisterOnServerLifespan(android.content.Context, long)"></A> 1642 1643<div class="jd-details api apilevel-"> 1644 <h4 class="jd-details-title"> 1645 <span class="normal"> 1646 public 1647 static 1648 1649 1650 1651 void 1652 </span> 1653 <span class="sympad">setRegisterOnServerLifespan</span> 1654 <span class="normal">(Context context, long lifespan)</span> 1655 </h4> 1656 <div class="api-level"> 1657 <div></div> 1658 1659 1660 1661 </div> 1662 <div class="jd-details-descr"> 1663 1664 <div class="jd-tagdata jd-tagdescr"><p>Sets how long (in milliseconds) the <code><a href="/reference/com/google/android/gcm/GCMRegistrar.html#isRegistered(android.content.Context)">isRegistered(Context)</a></code> 1665 flag is valid. 1666</p></div> 1667 1668 </div> 1669</div> 1670 1671 1672<A NAME="setRegisteredOnServer(android.content.Context, boolean)"></A> 1673 1674<div class="jd-details api apilevel-"> 1675 <h4 class="jd-details-title"> 1676 <span class="normal"> 1677 public 1678 static 1679 1680 1681 1682 void 1683 </span> 1684 <span class="sympad">setRegisteredOnServer</span> 1685 <span class="normal">(Context context, boolean flag)</span> 1686 </h4> 1687 <div class="api-level"> 1688 <div></div> 1689 1690 1691 1692 </div> 1693 <div class="jd-details-descr"> 1694 1695 <div class="jd-tagdata jd-tagdescr"><p>Sets whether the device was successfully registered in the server side. 1696</p></div> 1697 1698 </div> 1699</div> 1700 1701 1702<A NAME="unregister(android.content.Context)"></A> 1703 1704<div class="jd-details api apilevel-"> 1705 <h4 class="jd-details-title"> 1706 <span class="normal"> 1707 public 1708 static 1709 1710 1711 1712 void 1713 </span> 1714 <span class="sympad">unregister</span> 1715 <span class="normal">(Context context)</span> 1716 </h4> 1717 <div class="api-level"> 1718 <div></div> 1719 1720 1721 1722 </div> 1723 <div class="jd-details-descr"> 1724 1725 <div class="jd-tagdata jd-tagdescr"><p>Unregister the application. 1726 <p> 1727 The result will be returned as an 1728 <code><a href="/reference/com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">INTENT_FROM_GCM_REGISTRATION_CALLBACK</a></code> intent with an 1729 <code><a href="/reference/com/google/android/gcm/GCMConstants.html#EXTRA_UNREGISTERED">EXTRA_UNREGISTERED</a></code> extra. 1730</p></div> 1731 1732 </div> 1733</div> 1734 1735 1736 1737 1738 1739<!-- ========= METHOD DETAIL ======== --> 1740 1741 1742 1743<!-- ========= END OF CLASS DATA ========= --> 1744<A NAME="navbar_top"></A> 1745 1746 1747<div id="footer" class="wrap" > 1748 1749 1750 <div id="copyright"> 1751 1752 Except as noted, this content is licensed under <a 1753 href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. 1754 For details and restrictions, see the <a href="/license.html"> 1755 Content License</a>. 1756 </div> 1757 <div id="build_info"> 1758 1759<script src="/timestamp.js" type="text/javascript"></script> 1760<script>document.write(BUILD_TIMESTAMP)</script> 1761 1762 </div> 1763 1764 1765 <div id="footerlinks"> 1766 1767 <p> 1768 <a href="/about/index.html">About Android</a> | 1769 <a href="/legal.html">Legal</a> | 1770 <a href="/support.html">Support</a> 1771 </p> 1772 </div> 1773 1774</div> <!-- end footer --> 1775 1776</div> <!-- jd-content --> 1777 1778</div><!-- end doc-content --> 1779 1780</div> <!-- end body-content --> 1781 1782 1783 1784 1785 1786 1787</body> 1788</html> 1789