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<html> 100<head> 101 102 103<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 104<meta name="viewport" content="width=device-width" /> 105 106<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> 107<title>DataLayer | Android Developers</title> 108 109<!-- STYLESHEETS --> 110<link rel="stylesheet" 111href="//fonts.googleapis.com/css?family=Roboto+Condensed"> 112<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold" 113 title="roboto"> 114<link href="/assets/css/default.css?v=4" rel="stylesheet" type="text/css"> 115 116 117 118<!-- JAVASCRIPT --> 119<script src="//www.google.com/jsapi" type="text/javascript"></script> 120<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script> 121<script type="text/javascript"> 122 var toRoot = "/"; 123 var metaTags = []; 124 var devsite = false; 125</script> 126<script src="/assets/js/docs.js?v=3" type="text/javascript"></script> 127 128 129 130<script> 131 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 132 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 133 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 134 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 135 136 ga('create', 'UA-5831155-1', 'android.com'); 137 ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker); 138 ga('send', 'pageview'); 139 ga('universal.send', 'pageview'); // Send page view for new tracker. 140</script> 141 142</head> 143 144<body class="gc-documentation google 145 develop reference" itemscope itemtype="http://schema.org/Article"> 146 <div id="doc-api-level" class="" style="display:none"></div> 147 <a name="top"></a> 148 149 150<a name="top"></a> 151 152<!-- dialog to prompt lang pref change when loaded from hardcoded URL 153<div id="langMessage" style="display:none"> 154 <div> 155 <div class="lang en"> 156 <p>You requested a page in English, would you like to proceed with this language setting?</p> 157 </div> 158 <div class="lang es"> 159 <p>You requested a page in Spanish (Español), would you like to proceed with this language setting?</p> 160 </div> 161 <div class="lang ja"> 162 <p>You requested a page in Japanese (日本語), would you like to proceed with this language setting?</p> 163 </div> 164 <div class="lang ko"> 165 <p>You requested a page in Korean (한국어), would you like to proceed with this language setting?</p> 166 </div> 167 <div class="lang ru"> 168 <p>You requested a page in Russian (Русский), would you like to proceed with this language setting?</p> 169 </div> 170 <div class="lang zh-cn"> 171 <p>You requested a page in Simplified Chinese (简体中文), would you like to proceed with this language setting?</p> 172 </div> 173 <div class="lang zh-tw"> 174 <p>You requested a page in Traditional Chinese (繁體中文), would you like to proceed with this language setting?</p> 175 </div> 176 <a href="#" class="button yes" onclick="return false;"> 177 <span class="lang en">Yes</span> 178 <span class="lang es">Sí</span> 179 <span class="lang ja">Yes</span> 180 <span class="lang ko">Yes</span> 181 <span class="lang ru">Yes</span> 182 <span class="lang zh-cn">是的</span> 183 <span class="lang zh-tw">没有</span> 184 </a> 185 <a href="#" class="button" onclick="$('#langMessage').hide();return false;"> 186 <span class="lang en">No</span> 187 <span class="lang es">No</span> 188 <span class="lang ja">No</span> 189 <span class="lang ko">No</span> 190 <span class="lang ru">No</span> 191 <span class="lang zh-cn">没有</span> 192 <span class="lang zh-tw">没有</span> 193 </a> 194 </div> 195</div> --> 196 197 198 <!-- Header --> 199 <div id="header-wrapper"> 200 <div id="header"> 201 202 203 204 205 <div class="wrap" id="header-wrap"> 206 <div class="col-3 logo"> 207 <a href="/index.html"> 208 <img src="/assets/images/dac_logo.png" 209 srcset="/assets/images/dac_logo@2x.png 2x" 210 width="123" height="25" alt="Android Developers" /> 211 </a> 212 <div class="btn-quicknav" id="btn-quicknav"> 213 <a href="#" class="arrow-inactive">Quicknav</a> 214 <a href="#" class="arrow-active">Quicknav</a> 215 </div> 216 </div> 217 <ul class="nav-x col-9"> 218 <li class="design"> 219 <a href="/design/index.html" 220 zh-tw-lang="設計" 221 zh-cn-lang="设计" 222 ru-lang="Проектирование" 223 ko-lang="디자인" 224 ja-lang="設計" 225 es-lang="Diseñar" 226 >Design</a></li> 227 <li class="develop"><a href="/develop/index.html" 228 zh-tw-lang="開發" 229 zh-cn-lang="开发" 230 ru-lang="Разработка" 231 ko-lang="개발" 232 ja-lang="開発" 233 es-lang="Desarrollar" 234 >Develop</a></li> 235 <li class="distribute last"><a href="/distribute/index.html" 236 zh-tw-lang="發佈" 237 zh-cn-lang="分发" 238 ru-lang="Распространение" 239 ko-lang="배포" 240 ja-lang="配布" 241 es-lang="Distribuir" 242 >Distribute</a></li> 243 </ul> 244 245 246 247 248<div class="menu-container"> 249 <div class="moremenu"> 250 <div id="more-btn"></div> 251 </div> 252 <div class="morehover" id="moremenu"> 253 <div class="top"></div> 254 <div class="mid"> 255 <div class="header">Links</div> 256 <ul> 257 <li><a href="https://play.google.com/apps/publish/" target="_googleplay">Google Play Developer Console</a></li> 258 <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li> 259 <li><a href="/about/index.html">About Android</a></li> 260 </ul> 261 <div class="header">Android Sites</div> 262 <ul> 263 <li><a href="http://www.android.com">Android.com</a></li> 264 <li class="active"><a>Android Developers</a></li> 265 <li><a href="http://source.android.com">Android Open Source Project</a></li> 266 </ul> 267 268 269 270 <div class="header">Language</div> 271 <div id="language" class="locales"> 272 <select name="language" onChange="changeLangPref(this.value, true)"> 273 <option value="en">English</option> 274 <option value="es">Español</option> 275 <option value="ja">日本語</option> 276 <option value="ko">한국어</option> 277 <option value="ru">Русский</option> 278 <option value="zh-cn">中文(简体)</option> 279 <option value="zh-tw">中文(繁體)</option> 280 </select> 281 </div> 282 <script type="text/javascript"> 283 <!-- 284 loadLangPref(); 285 //--> 286 </script> 287 288 289 <br class="clearfix" /> 290 </div><!-- end 'mid' --> 291 <div class="bottom"></div> 292 </div><!-- end 'moremenu' --> 293 294 <div class="search" id="search-container"> 295 <div class="search-inner"> 296 <div id="search-btn"></div> 297 <div class="left"></div> 298 <form onsubmit="return submit_search()"> 299 <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q" 300 onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)" 301 onkeydown="return search_changed(event, true, '/')" 302 onkeyup="return search_changed(event, false, '/')" /> 303 </form> 304 <div class="right"></div> 305 <a class="close hide">close</a> 306 <div class="left"></div> 307 <div class="right"></div> 308 </div><!-- end search-inner --> 309 </div><!-- end search-container --> 310 311 <div class="search_filtered_wrapper reference"> 312 <div class="suggest-card reference no-display"> 313 <ul class="search_filtered"> 314 </ul> 315 </div> 316 </div> 317 318 <div class="search_filtered_wrapper docs"> 319 <div class="suggest-card dummy no-display"> </div> 320 <div class="suggest-card develop no-display"> 321 <ul class="search_filtered"> 322 </ul> 323 <div class="child-card guides no-display"> 324 </div> 325 <div class="child-card training no-display"> 326 </div> 327 <div class="child-card samples no-display"> 328 </div> 329 </div> 330 <div class="suggest-card design no-display"> 331 <ul class="search_filtered"> 332 </ul> 333 </div> 334 <div class="suggest-card distribute no-display"> 335 <ul class="search_filtered"> 336 </ul> 337 </div> 338 </div> 339</div><!-- end menu-container (search and menu widget) --> 340 341 342 343 <!-- Expanded quicknav --> 344 <div id="quicknav" class="col-13"> 345 <ul> 346 <li class="about"> 347 <ul> 348 <li><a href="/about/index.html">About</a></li> 349 <li><a href="/wear/index.html">Wear</a></li> 350 <li><a href="/tv/index.html">TV</a></li> 351 <li><a href="/auto/index.html">Auto</a></li> 352 </ul> 353 </li> 354 <li class="design"> 355 <ul> 356 <li><a href="/design/index.html">Get Started</a></li> 357 <li><a href="/design/devices.html">Devices</a></li> 358 <li><a href="/design/style/index.html">Style</a></li> 359 <li><a href="/design/patterns/index.html">Patterns</a></li> 360 <li><a href="/design/building-blocks/index.html">Building Blocks</a></li> 361 <li><a href="/design/downloads/index.html">Downloads</a></li> 362 <li><a href="/design/videos/index.html">Videos</a></li> 363 </ul> 364 </li> 365 <li class="develop"> 366 <ul> 367 <li><a href="/training/index.html" 368 zh-tw-lang="訓練課程" 369 zh-cn-lang="培训" 370 ru-lang="Курсы" 371 ko-lang="교육" 372 ja-lang="トレーニング" 373 es-lang="Capacitación" 374 >Training</a></li> 375 <li><a href="/guide/index.html" 376 zh-tw-lang="API 指南" 377 zh-cn-lang="API 指南" 378 ru-lang="Руководства по API" 379 ko-lang="API 가이드" 380 ja-lang="API ガイド" 381 es-lang="Guías de la API" 382 >API Guides</a></li> 383 <li><a href="/reference/packages.html" 384 zh-tw-lang="參考資源" 385 zh-cn-lang="参考" 386 ru-lang="Справочник" 387 ko-lang="참조문서" 388 ja-lang="リファレンス" 389 es-lang="Referencia" 390 >Reference</a></li> 391 <li><a href="/sdk/index.html" 392 zh-tw-lang="相關工具" 393 zh-cn-lang="工具" 394 ru-lang="Инструменты" 395 ko-lang="도구" 396 ja-lang="ツール" 397 es-lang="Herramientas" 398 >Tools</a> 399 </li> 400 <li><a href="/google/index.html">Google Services</a> 401 </li> 402 403 <li><a href="/samples/index.html">Samples</a> 404 </li> 405 406 </ul> 407 </li> 408 <li class="distribute last"> 409 <ul> 410 <li><a href="/distribute/googleplay/index.html">Google Play</a></li> 411 <li><a href="/distribute/essentials/index.html">Essentials</a></li> 412 <li><a href="/distribute/users/index.html">Get Users</a></li> 413 <li><a href="/distribute/engage/index.html">Engage & Retain</a></li> 414 <li><a href="/distribute/monetize/index.html">Monetize</a></li> 415 <li><a href="/distribute/tools/index.html">Tools & Reference</a></li> 416 <li><a href="/distribute/stories/index.html">Developer Stories</a></li> 417 </ul> 418 </li> 419 </ul> 420 </div><!-- /Expanded quicknav --> 421 </div><!-- end header-wrap.wrap --> 422 </div><!-- end header --> 423 424 425 <!-- Secondary x-nav --> 426 <div id="nav-x"> 427 <div class="wrap" style="position:relative;z-index:1"> 428 429 430 431 432 433 <ul class="nav-x col-9 develop" style="width:100%"> 434 <li class="training"><a href="/training/index.html" 435 zh-tw-lang="訓練課程" 436 zh-cn-lang="培训" 437 ru-lang="Курсы" 438 ko-lang="교육" 439 ja-lang="トレーニング" 440 es-lang="Capacitación" 441 >Training</a></li> 442 <li class="guide"><a href="/guide/index.html" 443 zh-tw-lang="API 指南" 444 zh-cn-lang="API 指南" 445 ru-lang="Руководства по API" 446 ko-lang="API 가이드" 447 ja-lang="API ガイド" 448 es-lang="Guías de la API" 449 >API Guides</a></li> 450 <li class="reference"><a href="/reference/packages.html" 451 zh-tw-lang="參考資源" 452 zh-cn-lang="参考" 453 ru-lang="Справочник" 454 ko-lang="참조문서" 455 ja-lang="リファレンス" 456 es-lang="Referencia" 457 >Reference</a></li> 458 <li class="tools"><a href="/sdk/index.html" 459 zh-tw-lang="相關工具" 460 zh-cn-lang="工具" 461 ru-lang="Инструменты" 462 ko-lang="도구" 463 ja-lang="ツール" 464 es-lang="Herramientas" 465 >Tools</a></li> 466 <li class="google"><a href="/google/index.html" 467 >Google Services</a> 468 </li> 469 470 <li class="samples"><a href="/samples/index.html" 471 >Samples</a> 472 </li> 473 474 </ul> 475 </div> 476 </div> 477 <!-- /Sendondary x-nav DEVELOP --> 478 479 480 481 <div id="searchResults" class="wrap" style="display:none;"> 482 <h2 id="searchTitle">Results</h2> 483 <div id="leftSearchControl" class="search-control">Loading...</div> 484 </div> 485 </div> <!--end header-wrapper --> 486 487 <div id="sticky-header"> 488 <div> 489 <a class="logo" href="#top"></a> 490 <a class="top" href="#top"></a> 491 <ul class="breadcrumb"> 492 493 <li class="current">DataLayer</li> 494 </ul> 495 </div> 496 </div> 497 498 499 500 501 502 503 <div class="wrap clearfix" id="body-content"> 504 <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement"> 505 <div id="devdoc-nav" class="scroll-pane"> 506 507 508 509<ul id="nav"> 510 511 <li class="nav-section"> 512 <div class="nav-section-header empty"><a href="/google/index.html"> 513 <span class="en">Overview</span> 514 </a></div> 515 </li> 516 517 <li class="nav-section"> 518 <div class="nav-section-header empty"><a href="/google/play-services/games.html"> 519 <span class="en">Games</span> 520 </a></div> 521 </li> 522 <li class="nav-section"> 523 <div class="nav-section-header empty"><a href="/google/play-services/location.html"> 524 <span class="en">Location</span> 525 </a></div> 526 </li> 527 <li class="nav-section"> 528 <div class="nav-section-header empty"><a href="/google/play-services/plus.html"> 529 <span class="en">Google+</span> 530 </a></div> 531 </li> 532 <li class="nav-section"> 533 <div class="nav-section-header empty"><a href="/google/play-services/maps.html"> 534 <span class="en">Maps</span> 535 </a></div> 536 </li> 537 <li class="nav-section"> 538 <div class="nav-section-header empty"><a href="/google/play-services/drive.html"> 539 <span class="en">Drive</span> 540 </a></div> 541 </li> 542 <li class="nav-section"> 543 <div class="nav-section-header empty"><a href="/google/play-services/cast.html"> 544 <span class="en">Cast</span> 545 </a></div> 546 </li> 547 <li class="nav-section"> 548 <div class="nav-section-header"><a href="/google/play-services/ads.html"> 549 <span class="en">Ads</span></a> 550 </div> 551 <ul> 552 <li><a href="/google/play-services/id.html"> 553 <span class="en">Advertising ID</span></a> 554 </li> 555 </ul> 556 </li> 557 <li class="nav-section"> 558 <div class="nav-section-header empty"><a href="/google/play-services/wallet.html"> 559 <span class="en">Wallet</span> 560 </a></div> 561 </li> 562 563 564 <li class="nav-section"> 565 <div class="nav-section-header"><a href="/google/play-services/index.html"> 566 <span class="en">Google Play Services</span></a> 567 </div> 568 <ul> 569 <li><a href="/google/play-services/setup.html"> 570 <span class="en">Setting Up Google Play Services</span></a> 571 </li> 572 <li class="nav-section"> 573 <div class="nav-section-header"><a href="/google/auth/api-client.html"> 574 <span class="en">Accessing Google APIs</span></a> 575 </div> 576 <ul> 577 <li> 578 <a href="/google/auth/http-auth.html"> 579 <span class="en">Authorizing with Google for REST APIs</span> 580 </a> 581 </li> 582 </ul> 583 </li> 584 <li id="gms-tree-list" class="nav-section"> 585 <div class="nav-section-header"> 586 <a href="/reference/gms-packages.html"> 587 <span class="en">Reference</span> 588 </a> 589 <div> 590 </li> 591 </ul> 592 </li> 593 594 595 <li class="nav-section"> 596 <div class="nav-section-header"><a href="/google/play/billing/index.html"> 597 <span class="en">Google Play In-app Billing</span></a> 598 </div> 599 <ul> 600 <li><a href="/google/play/billing/billing_overview.html"> 601 <span class="en">Overview</span></a> 602 </li> 603 <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html"> 604 <span class="en">Version 3 API</span></a></div> 605 <ul> 606 <li><a href="/google/play/billing/billing_integrate.html"> 607 <span class="en">Implementing the API</span></a></li> 608 <li><a href="/google/play/billing/billing_reference.html"> 609 <span class="en">Reference</span></a></li> 610 </ul> 611 </li> 612 <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html"> 613 <span class="en">Version 2 API</span></a></div> 614 <ul> 615 <li><a href="/google/play/billing/v2/billing_integrate.html"> 616 <span class="en">Implementing the API</span></a></li> 617 <li><a href="/google/play/billing/v2/billing_subscriptions.html"> 618 <span class="en">Subscriptions</span></a></li> 619 <li><a href="/google/play/billing/v2/billing_reference.html"> 620 <span class="en">Reference</span></a></li> 621 </ul> 622 </li> 623 <li><a href="/google/play/billing/billing_subscriptions.html"> 624 <span class="en">Subscriptions</span></a> 625 </li> 626 <li><a href="/google/play/billing/billing_best_practices.html"> 627 <span class="en">Security and Design</span></a> 628 </li> 629 <li><a href="/google/play/billing/billing_testing.html"> 630 <span class="en">Testing In-app Billing</span></a> 631 </li> 632 <li><a href="/google/play/billing/billing_admin.html"> 633 <span class="en">Administering In-app Billing</span></a> 634 </li> 635 <li><a href="/google/play/billing/versions.html"> 636 <span class="en">Version Notes</span></a> 637 </li> 638 </ul> 639 </li> 640 641 642 643 <li class="nav-section"> 644 <div class="nav-section-header"><a href="/google/gcm/index.html"> 645 <span class="en">Google Cloud Messaging</span></a> 646 </div> 647 <ul> 648 <li><a href="/google/gcm/gcm.html"> 649 <span class="en">Overview</span></a> 650 </li> 651 <li><a href="/google/gcm/gs.html"> 652 <span class="en">Getting Started</span></a> 653 </li> 654 <li><a href="/google/gcm/client.html"> 655 <span class="en">Implementing GCM Client</span></a> 656 </li> 657 <li class="nav-section"><div class="nav-section-header"><a href="/google/gcm/server.html"> 658 <span class="en">Implementing GCM Server</span></a></div> 659 <ul> 660 <li><a href="/google/gcm/ccs.html"> 661 <span class="en">CCS (XMPP)</span></a></li> 662 <li><a href="/google/gcm/http.html"> 663 <span class="en">HTTP</span></a></li> 664 </ul> 665 </li> 666 <li><a href="/google/gcm/notifications.html"> 667 <span class="en">User Notifications</span></a> 668 </li> 669 <li><a href="/google/gcm/adv.html"> 670 <span class="en">Advanced Topics</span></a> 671 </li> 672 <li><a href="/google/gcm/c2dm.html"> 673 <span class="en">Migration</span></a> 674 </li> 675 <li id="gcm-tree-list" class="nav-section"> 676 <div class="nav-section-header"> 677 <a href="/reference/gcm-packages.html"> 678 <span class="en">Reference</span> 679 </a> 680 <div> 681 </li> 682 </ul> 683 </li> 684 685 <li class="nav-section"> 686 <div class="nav-section-header empty"><a href="/google/gcs/index.html"> 687 <span class="en">Google Cloud Save</span></a> 688 </div> 689 </li> 690 691 <li class="nav-section"> 692 <div class="nav-section-header"><a href="/google/play/dist.html"> 693 <span class="en">Google Play Distribution</span></a> 694 </div> 695 <ul> 696 <li><a href="/google/play/filters.html"> 697 <span class="en">Filters on Google Play</span></a> 698 </li> 699 <li><a href="/google/play/billing/gp-purchase-status-api.html"> 700 <span class="en">Google Play Developer API</span></a> 701 </li> 702 <li><a href="/google/play/publishing/multiple-apks.html"> 703 <span class="en">Multiple APK Support</span></a> 704 </li> 705 <li><a href="/google/play/expansion-files.html"> 706 <span class="en">APK Expansion Files</span></a> 707 </li> 708 <li class="nav-section"> 709 <div class="nav-section-header"><a href="/google/play/licensing/index.html"> 710 <span class="en">Application Licensing</span></a> 711 </div> 712 <ul> 713 <li><a href="/google/play/licensing/overview.html"> 714 <span class="en">Licensing Overview</span></a> 715 </li> 716 <li><a href="/google/play/licensing/setting-up.html"> 717 <span class="en">Setting Up for Licensing</span></a> 718 </li> 719 <li><a href="/google/play/licensing/adding-licensing.html"> 720 <span class="en">Adding Licensing to Your App</span></a> 721 </li> 722 <li><a href="/google/play/licensing/licensing-reference.html"> 723 <span class="en">Licensing Reference</span></a> 724 </li> 725 </ul> 726 </li> 727 728 <li class="nav-section"> 729 <div class="nav-section-header"><a href="/google/backup/index.html"> 730 Android Backup Service</a> 731 </div> 732 <ul> 733 <li><a href="/google/backup/signup.html"> 734 Register</a> 735 </li> 736 </ul> 737 </li> 738 739 </ul> 740 741</li> 742 743 744 745</ul> 746 747<script type="text/javascript"> 748<!-- 749 buildToggleLists(); 750 changeNavLang(getLangPref()); 751//--> 752</script> 753 754 755 756 757 </div> 758 <script type="text/javascript"> 759 showGoogleRefTree(); 760 761 </script> 762 </div> <!-- end side-nav --> 763 <script> 764 $(document).ready(function() { 765 scrollIntoView("devdoc-nav"); 766 }); 767 </script> 768 769 770 771 772 773 774<div class="col-12" id="doc-col"> 775 776<div id="api-info-block"> 777 778 779 780 781 782 783 784 785 786 787 788<div class="sum-details-links"> 789 790Summary: 791 792 793 794 795 796 <a href="#constants">Constants</a> 797 798 799 800 801 | <a href="#lfields">Fields</a> 802 803 804 805 806 807 808 | <a href="#pubmethods">Methods</a> 809 810 811 812 813 | <a href="#inhmethods">Inherited Methods</a> 814 815| <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a> 816 817</div><!-- end sum-details-links --> 818<div class="api-level"> 819 820 821 822 823</div> 824</div><!-- end api-info-block --> 825 826 827<!-- ======== START OF CLASS DATA ======== --> 828 829<div id="jd-header"> 830 public 831 832 833 834 class 835<h1 itemprop="name">DataLayer</h1> 836 837 838 839 840 extends Object<br/> 841 842 843 844 845 846 847 848 849 850 851 852 853</div><!-- end header --> 854 855<div id="naMessage"></div> 856 857<div id="jd-content" class="api apilevel-"> 858<table class="jd-inheritance-table"> 859 860 861 <tr> 862 863 <td colspan="2" class="jd-inheritance-class-cell">java.lang.Object</td> 864 </tr> 865 866 867 <tr> 868 869 <td class="jd-inheritance-space"> ↳</td> 870 871 <td colspan="1" class="jd-inheritance-class-cell">com.google.android.gms.tagmanager.DataLayer</td> 872 </tr> 873 874 875</table> 876 877 878 879 880 881 882 883<div class="jd-descr"> 884 885 886<h2>Class Overview</h2> 887<p itemprop="articleBody">The data layer is a map holding generic information about the application. It uses a standard set 888 of keys so it can be read by any party that understands the specification. The data layer state 889 is updated through its API. For example, an app might start with the following dataLayer: 890 891 <pre> 892 { 893 "title": "Original screen title" 894 } 895</pre> 896 897 As the state/data of an app can change, the app can update the dataLayer with a call such as: 898 899 <pre> 900 dataLayer.push(DataLayer.mapOf("title", "New screen title")); 901</pre> 902 903 Now the data layer contains: 904 905 <pre> 906 { 907 "title": "New screen title" 908 } 909</pre> 910 911 After another push happens: 912 913 <pre> 914 dataLayer.push(DataLayer.mapOf("xyz", 3)); 915</pre> 916 917 The dataLayer contains: 918 919 <pre> 920 { 921 "title": "New screen title", 922 "xyz": 3 923 } 924</pre> 925 926 The following example demonstrates how array and map merging works. If the original dataLayer 927 contains: 928 929 <pre> 930 { 931 "items": ["item1", null, "item2", {"a": "aValue", "b": "bValue"}] 932 } 933</pre> 934 935 After this push happens: 936 937 <pre> 938 dataLayer.push("items", DataLayer.listOf(null, "item6", DataLayer.OBJECT_NOT_PRESENT, 939 DataLayer.mapOf("a", null))); 940</pre> 941 942 The dataLayer contains: 943 944 <pre> 945 { 946 "items": [null, "item6", "item2", {"a": null, "b": "bValue"}] 947 } 948</pre> 949 <p> 950 Pushes happen synchronously; after the push, changes have been reflected in the model. 951 <p> 952 When an event is pushed to the data layer, rules for tags are evaluated and any 953 tags matching this event will fire. For example, given a container with a tag whose firing rule 954 is that "event" is equal to "openScreen", after this push: 955 956 <pre> 957 dataLayer.pushEvent("openScreen", DataLayer.mapOf()); 958 </pre> 959 960 that tag will fire. 961</p> 962 963 964 965 966 967</div><!-- jd-descr --> 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984<div class="jd-descr"> 985 986 987<h2>Summary</h2> 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001<!-- =========== ENUM CONSTANT SUMMARY =========== --> 1002<table id="constants" class="jd-sumtable"><tr><th colspan="12">Constants</th></tr> 1003 1004 1005 1006 <tr class="alt-color api apilevel-" > 1007 <td class="jd-typecol">String</td> 1008 <td class="jd-linkcol"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#EVENT_KEY">EVENT_KEY</a></td> 1009 <td class="jd-descrcol" width="100%"> 1010 If a map is pushed containing this key, it's treated as an event, and tags are evaluated. 1011 1012 1013 1014 </td> 1015 </tr> 1016 1017 1018 1019</table> 1020 1021 1022 1023 1024 1025 1026 1027<!-- =========== FIELD SUMMARY =========== --> 1028<table id="lfields" class="jd-sumtable"><tr><th colspan="12">Fields</th></tr> 1029 1030 1031 1032 <tr class="alt-color api apilevel-" > 1033 <td class="jd-typecol"><nobr> 1034 public 1035 static 1036 final 1037 Object</nobr></td> 1038 <td class="jd-linkcol"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#OBJECT_NOT_PRESENT">OBJECT_NOT_PRESENT</a></td> 1039 <td class="jd-descrcol" width="100%"> 1040 Values of this type used in a List causes the List to be sparse when merging; it's as if 1041 there were no element at that index. 1042 1043 1044 1045 </td> 1046 </tr> 1047 1048 1049 1050</table> 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062<!-- ========== METHOD SUMMARY =========== --> 1063<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr> 1064 1065 1066 1067 1068 <tr class="alt-color api apilevel-" > 1069 <td class="jd-typecol"><nobr> 1070 1071 1072 1073 1074 1075 Object</nobr> 1076 </td> 1077 <td class="jd-linkcol" width="100%"><nobr> 1078 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#get(java.lang.String)">get</a></span>(String key)</nobr> 1079 1080 <div class="jd-descrdiv"> 1081 Returns the object in the model associated with the given key. 1082 1083 1084 1085 </div> 1086 1087 </td></tr> 1088 1089 1090 1091 <tr class=" api apilevel-" > 1092 <td class="jd-typecol"><nobr> 1093 1094 1095 1096 static 1097 1098 List<Object></nobr> 1099 </td> 1100 <td class="jd-linkcol" width="100%"><nobr> 1101 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#listOf(java.lang.Object...)">listOf</a></span>(Object... objects)</nobr> 1102 1103 <div class="jd-descrdiv"> 1104 Utility method that creates a list. 1105 1106 1107 1108 </div> 1109 1110 </td></tr> 1111 1112 1113 1114 <tr class="alt-color api apilevel-" > 1115 <td class="jd-typecol"><nobr> 1116 1117 1118 1119 static 1120 1121 Map<String, Object></nobr> 1122 </td> 1123 <td class="jd-linkcol" width="100%"><nobr> 1124 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#mapOf(java.lang.Object...)">mapOf</a></span>(Object... objects)</nobr> 1125 1126 <div class="jd-descrdiv"> 1127 Utility method that creates a map. 1128 1129 1130 1131 </div> 1132 1133 </td></tr> 1134 1135 1136 1137 <tr class=" api apilevel-" > 1138 <td class="jd-typecol"><nobr> 1139 1140 1141 1142 1143 1144 void</nobr> 1145 </td> 1146 <td class="jd-linkcol" width="100%"><nobr> 1147 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#push(java.util.Map<java.lang.String, java.lang.Object>)">push</a></span>(Map<String, Object> update)</nobr> 1148 1149 <div class="jd-descrdiv"> 1150 Merges the given <code>update</code> object into the existing data model, calling any 1151 listeners with the update (after the merge occurs). 1152 1153 1154 1155 </div> 1156 1157 </td></tr> 1158 1159 1160 1161 <tr class="alt-color api apilevel-" > 1162 <td class="jd-typecol"><nobr> 1163 1164 1165 1166 1167 1168 void</nobr> 1169 </td> 1170 <td class="jd-linkcol" width="100%"><nobr> 1171 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#push(java.lang.String, java.lang.Object)">push</a></span>(String key, Object value)</nobr> 1172 1173 <div class="jd-descrdiv"> 1174 Pushes a key/value pair of data to the data layer. 1175 1176 1177 1178 </div> 1179 1180 </td></tr> 1181 1182 1183 1184 <tr class=" api apilevel-" > 1185 <td class="jd-typecol"><nobr> 1186 1187 1188 1189 1190 1191 void</nobr> 1192 </td> 1193 <td class="jd-linkcol" width="100%"><nobr> 1194 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#pushEvent(java.lang.String, java.util.Map<java.lang.String, java.lang.Object>)">pushEvent</a></span>(String eventName, Map<String, Object> update)</nobr> 1195 1196 <div class="jd-descrdiv"> 1197 Pushes an event, along with an update map, to the data layer. 1198 1199 1200 1201 </div> 1202 1203 </td></tr> 1204 1205 1206 1207 <tr class="alt-color api apilevel-" > 1208 <td class="jd-typecol"><nobr> 1209 1210 1211 1212 1213 1214 String</nobr> 1215 </td> 1216 <td class="jd-linkcol" width="100%"><nobr> 1217 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#toString()">toString</a></span>()</nobr> 1218 1219 <div class="jd-descrdiv"> 1220 Returns a human readable string representing the Data Layer object. 1221 1222 1223 1224 </div> 1225 1226 </td></tr> 1227 1228 1229 1230</table> 1231 1232 1233 1234 1235 1236 1237 1238<!-- ========== METHOD SUMMARY =========== --> 1239<table id="inhmethods" class="jd-sumtable"><tr><th> 1240 <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a> 1241 <div style="clear:left;">Inherited Methods</div></th></tr> 1242 1243 1244<tr class="api apilevel-" > 1245<td colspan="12"> 1246 <a href="#" onclick="return toggleInherited(this, null)" id="inherited-methods-java.lang.Object" class="jd-expando-trigger closed" 1247 ><img id="inherited-methods-java.lang.Object-trigger" 1248 src="/assets/images/triangle-closed.png" 1249 class="jd-expando-trigger-img" /></a> 1250From class 1251 1252 java.lang.Object 1253 1254<div id="inherited-methods-java.lang.Object"> 1255 <div id="inherited-methods-java.lang.Object-list" 1256 class="jd-inheritedlinks"> 1257 </div> 1258 <div id="inherited-methods-java.lang.Object-summary" style="display: none;"> 1259 <table class="jd-sumtable-expando"> 1260 1261 1262 1263 1264 <tr class="alt-color api apilevel-" > 1265 <td class="jd-typecol"><nobr> 1266 1267 1268 1269 1270 1271 Object</nobr> 1272 </td> 1273 <td class="jd-linkcol" width="100%"><nobr> 1274 <span class="sympad">clone</span>()</nobr> 1275 1276 </td></tr> 1277 1278 1279 1280 <tr class=" api apilevel-" > 1281 <td class="jd-typecol"><nobr> 1282 1283 1284 1285 1286 1287 boolean</nobr> 1288 </td> 1289 <td class="jd-linkcol" width="100%"><nobr> 1290 <span class="sympad">equals</span>(Object arg0)</nobr> 1291 1292 </td></tr> 1293 1294 1295 1296 <tr class="alt-color api apilevel-" > 1297 <td class="jd-typecol"><nobr> 1298 1299 1300 1301 1302 1303 void</nobr> 1304 </td> 1305 <td class="jd-linkcol" width="100%"><nobr> 1306 <span class="sympad">finalize</span>()</nobr> 1307 1308 </td></tr> 1309 1310 1311 1312 <tr class=" api apilevel-" > 1313 <td class="jd-typecol"><nobr> 1314 1315 1316 final 1317 1318 1319 Class<?></nobr> 1320 </td> 1321 <td class="jd-linkcol" width="100%"><nobr> 1322 <span class="sympad">getClass</span>()</nobr> 1323 1324 </td></tr> 1325 1326 1327 1328 <tr class="alt-color api apilevel-" > 1329 <td class="jd-typecol"><nobr> 1330 1331 1332 1333 1334 1335 int</nobr> 1336 </td> 1337 <td class="jd-linkcol" width="100%"><nobr> 1338 <span class="sympad">hashCode</span>()</nobr> 1339 1340 </td></tr> 1341 1342 1343 1344 <tr class=" api apilevel-" > 1345 <td class="jd-typecol"><nobr> 1346 1347 1348 final 1349 1350 1351 void</nobr> 1352 </td> 1353 <td class="jd-linkcol" width="100%"><nobr> 1354 <span class="sympad">notify</span>()</nobr> 1355 1356 </td></tr> 1357 1358 1359 1360 <tr class="alt-color api apilevel-" > 1361 <td class="jd-typecol"><nobr> 1362 1363 1364 final 1365 1366 1367 void</nobr> 1368 </td> 1369 <td class="jd-linkcol" width="100%"><nobr> 1370 <span class="sympad">notifyAll</span>()</nobr> 1371 1372 </td></tr> 1373 1374 1375 1376 <tr class=" api apilevel-" > 1377 <td class="jd-typecol"><nobr> 1378 1379 1380 1381 1382 1383 String</nobr> 1384 </td> 1385 <td class="jd-linkcol" width="100%"><nobr> 1386 <span class="sympad">toString</span>()</nobr> 1387 1388 </td></tr> 1389 1390 1391 1392 <tr class="alt-color api apilevel-" > 1393 <td class="jd-typecol"><nobr> 1394 1395 1396 final 1397 1398 1399 void</nobr> 1400 </td> 1401 <td class="jd-linkcol" width="100%"><nobr> 1402 <span class="sympad">wait</span>()</nobr> 1403 1404 </td></tr> 1405 1406 1407 1408 <tr class=" api apilevel-" > 1409 <td class="jd-typecol"><nobr> 1410 1411 1412 final 1413 1414 1415 void</nobr> 1416 </td> 1417 <td class="jd-linkcol" width="100%"><nobr> 1418 <span class="sympad">wait</span>(long arg0, int arg1)</nobr> 1419 1420 </td></tr> 1421 1422 1423 1424 <tr class="alt-color api apilevel-" > 1425 <td class="jd-typecol"><nobr> 1426 1427 1428 final 1429 1430 1431 void</nobr> 1432 </td> 1433 <td class="jd-linkcol" width="100%"><nobr> 1434 <span class="sympad">wait</span>(long arg0)</nobr> 1435 1436 </td></tr> 1437 1438 1439</table> 1440 </div> 1441</div> 1442</td></tr> 1443 1444 1445</table> 1446 1447 1448</div><!-- jd-descr (summary) --> 1449 1450<!-- Details --> 1451 1452 1453 1454 1455 1456 1457 1458 1459<!-- XML Attributes --> 1460 1461 1462<!-- Enum Values --> 1463 1464 1465<!-- Constants --> 1466 1467 1468<!-- ========= ENUM CONSTANTS DETAIL ======== --> 1469<h2>Constants</h2> 1470 1471 1472 1473 1474<A NAME="EVENT_KEY"></A> 1475 1476<div class="jd-details api apilevel-"> 1477 <h4 class="jd-details-title"> 1478 <span class="normal"> 1479 public 1480 static 1481 final 1482 String 1483 </span> 1484 EVENT_KEY 1485 </h4> 1486 <div class="api-level"> 1487 1488 1489 1490 1491 </div> 1492 <div class="jd-details-descr"> 1493 1494 1495 1496 1497 <div class="jd-tagdata jd-tagdescr"><p>If a map is pushed containing this key, it's treated as an event, and tags are evaluated. 1498</p></div> 1499 1500 1501 <div class="jd-tagdata"> 1502 <span class="jd-tagtitle">Constant Value: </span> 1503 <span> 1504 1505 "event" 1506 1507 </span> 1508 </div> 1509 1510 </div> 1511</div> 1512 1513 1514 1515 1516<!-- Fields --> 1517 1518 1519<!-- ========= FIELD DETAIL ======== --> 1520<h2>Fields</h2> 1521 1522 1523 1524 1525<A NAME="OBJECT_NOT_PRESENT"></A> 1526 1527<div class="jd-details api apilevel-"> 1528 <h4 class="jd-details-title"> 1529 <span class="normal"> 1530 public 1531 static 1532 final 1533 Object 1534 </span> 1535 OBJECT_NOT_PRESENT 1536 </h4> 1537 <div class="api-level"> 1538 1539 1540 1541 1542 </div> 1543 <div class="jd-details-descr"> 1544 1545 1546 1547 1548 <div class="jd-tagdata jd-tagdescr"><p>Values of this type used in a List causes the List to be sparse when merging; it's as if 1549 there were no element at that index. 1550</p></div> 1551 1552 1553 </div> 1554</div> 1555 1556 1557 1558 1559<!-- Public ctors --> 1560 1561 1562 1563<!-- ========= CONSTRUCTOR DETAIL ======== --> 1564<!-- Protected ctors --> 1565 1566 1567 1568<!-- ========= METHOD DETAIL ======== --> 1569<!-- Public methdos --> 1570 1571<h2>Public Methods</h2> 1572 1573 1574 1575<A NAME="get(java.lang.String)"></A> 1576 1577<div class="jd-details api apilevel-"> 1578 <h4 class="jd-details-title"> 1579 <span class="normal"> 1580 public 1581 1582 1583 1584 1585 Object 1586 </span> 1587 <span class="sympad">get</span> 1588 <span class="normal">(String key)</span> 1589 </h4> 1590 <div class="api-level"> 1591 <div></div> 1592 1593 1594 1595 </div> 1596 <div class="jd-details-descr"> 1597 1598 1599 1600 1601 <div class="jd-tagdata jd-tagdescr"><p>Returns the object in the model associated with the given key. If the key is not found, 1602 <code>null</code> is returned. 1603 <p> 1604 The key can can have embedded periods. For example: a key of <code>"a.b.c"</code> 1605 returns a map with key <code>"c"</code> in a map with key 1606 <code>"b"</code> in a map with key <code>"a"</code> in the 1607 model. 1608</p></div> 1609 1610 </div> 1611</div> 1612 1613 1614<A NAME="listOf(java.lang.Object...)"></A> 1615 1616<div class="jd-details api apilevel-"> 1617 <h4 class="jd-details-title"> 1618 <span class="normal"> 1619 public 1620 static 1621 1622 1623 1624 List<Object> 1625 </span> 1626 <span class="sympad">listOf</span> 1627 <span class="normal">(Object... objects)</span> 1628 </h4> 1629 <div class="api-level"> 1630 <div></div> 1631 1632 1633 1634 </div> 1635 <div class="jd-details-descr"> 1636 1637 1638 1639 1640 <div class="jd-tagdata jd-tagdescr"><p>Utility method that creates a list. 1641 <p> 1642 For example, the following creates a list containing <code>"object1"</code> and 1643 <code>"object2"</code>: 1644 1645 <pre> 1646 List<Object> list = DataLayer.listOf("object1", "object2"); 1647 </pre> 1648</p></div> 1649 1650 </div> 1651</div> 1652 1653 1654<A NAME="mapOf(java.lang.Object...)"></A> 1655 1656<div class="jd-details api apilevel-"> 1657 <h4 class="jd-details-title"> 1658 <span class="normal"> 1659 public 1660 static 1661 1662 1663 1664 Map<String, Object> 1665 </span> 1666 <span class="sympad">mapOf</span> 1667 <span class="normal">(Object... objects)</span> 1668 </h4> 1669 <div class="api-level"> 1670 <div></div> 1671 1672 1673 1674 </div> 1675 <div class="jd-details-descr"> 1676 1677 1678 1679 1680 <div class="jd-tagdata jd-tagdescr"><p>Utility method that creates a map. The parameters should be pairs of key values. 1681 <p> 1682 For example, the following creates a map mapping <code>"key1"</code> to 1683 <code>"value1"</code> and <code>"key2" 1684 </code> to <code>"value2"</code>: 1685 1686 <pre> 1687 Map<String, Object> map = DataLayer.mapOf("key1", "value1", 1688 "key2", "value2"); 1689 </pre></p></div> 1690 <div class="jd-tagdata"> 1691 <h5 class="jd-tagtitle">Throws</h5> 1692 <table class="jd-tagtable"> 1693 <tr> 1694 <th>IllegalArgumentException</td> 1695 <td>if there are an odd number of parameters or a key is not a 1696 string 1697</td> 1698 </tr> 1699 </table> 1700 </div> 1701 1702 </div> 1703</div> 1704 1705 1706<A NAME="push(java.util.Map<java.lang.String, java.lang.Object>)"></A> 1707 1708<div class="jd-details api apilevel-"> 1709 <h4 class="jd-details-title"> 1710 <span class="normal"> 1711 public 1712 1713 1714 1715 1716 void 1717 </span> 1718 <span class="sympad">push</span> 1719 <span class="normal">(Map<String, Object> update)</span> 1720 </h4> 1721 <div class="api-level"> 1722 <div></div> 1723 1724 1725 1726 </div> 1727 <div class="jd-details-descr"> 1728 1729 1730 1731 1732 <div class="jd-tagdata jd-tagdescr"><p>Merges the given <code>update</code> object into the existing data model, calling any 1733 listeners with the update (after the merge occurs). 1734 <p> 1735 If you want to represent a missing value (like an empty index in a List), use the 1736 <code>OBJECT_NOT_PRESENT</code> object. 1737 <p> 1738 If another thread is executing a push, this call blocks until that thread is finished. 1739 <p> 1740 This is normally a synchronous call. However, if, while the thread is executing the push, 1741 another push happens from the same thread, then that second push is asynchronous (the second 1742 push will return before changes have been made to the data layer). This second push from the 1743 same thread can occur, for example, if a data layer push is made in response to a tag firing. 1744 <p> 1745 If the <code>update</code> contains the key <code>event</code>, rules will be evaluated and 1746 matching tags will fire.</p></div> 1747 <div class="jd-tagdata"> 1748 <h5 class="jd-tagtitle">Parameters</h5> 1749 <table class="jd-tagtable"> 1750 <tr> 1751 <th>update</td> 1752 <td>the update object to process 1753</td> 1754 </tr> 1755 </table> 1756 </div> 1757 1758 </div> 1759</div> 1760 1761 1762<A NAME="push(java.lang.String, java.lang.Object)"></A> 1763 1764<div class="jd-details api apilevel-"> 1765 <h4 class="jd-details-title"> 1766 <span class="normal"> 1767 public 1768 1769 1770 1771 1772 void 1773 </span> 1774 <span class="sympad">push</span> 1775 <span class="normal">(String key, Object value)</span> 1776 </h4> 1777 <div class="api-level"> 1778 <div></div> 1779 1780 1781 1782 </div> 1783 <div class="jd-details-descr"> 1784 1785 1786 1787 1788 <div class="jd-tagdata jd-tagdescr"><p>Pushes a key/value pair of data to the data layer. This is just a convenience method that 1789 calls <code>push(DataLayer.mapOf(key, value))</code>. 1790 <p> 1791 A key with value <code>event</code> will cause rules to be evaluated and matching tags 1792 to be fired. 1793</p></div> 1794 1795 </div> 1796</div> 1797 1798 1799<A NAME="pushEvent(java.lang.String, java.util.Map<java.lang.String, java.lang.Object>)"></A> 1800 1801<div class="jd-details api apilevel-"> 1802 <h4 class="jd-details-title"> 1803 <span class="normal"> 1804 public 1805 1806 1807 1808 1809 void 1810 </span> 1811 <span class="sympad">pushEvent</span> 1812 <span class="normal">(String eventName, Map<String, Object> update)</span> 1813 </h4> 1814 <div class="api-level"> 1815 <div></div> 1816 1817 1818 1819 </div> 1820 <div class="jd-details-descr"> 1821 1822 1823 1824 1825 <div class="jd-tagdata jd-tagdescr"><p>Pushes an event, along with an update map, to the data layer. 1826 <p> 1827 This is just a convenience method that pushes a map containing a key <code>event</code> whose 1828 value is <code>eventName</code> along with the contents of <code>update</code> via 1829 <code>push(Map<String, Object>)</code>. 1830</p></div> 1831 1832 </div> 1833</div> 1834 1835 1836<A NAME="toString()"></A> 1837 1838<div class="jd-details api apilevel-"> 1839 <h4 class="jd-details-title"> 1840 <span class="normal"> 1841 public 1842 1843 1844 1845 1846 String 1847 </span> 1848 <span class="sympad">toString</span> 1849 <span class="normal">()</span> 1850 </h4> 1851 <div class="api-level"> 1852 <div></div> 1853 1854 1855 1856 </div> 1857 <div class="jd-details-descr"> 1858 1859 1860 1861 1862 <div class="jd-tagdata jd-tagdescr"><p>Returns a human readable string representing the Data Layer object. 1863</p></div> 1864 1865 </div> 1866</div> 1867 1868 1869 1870 1871 1872<!-- ========= METHOD DETAIL ======== --> 1873 1874 1875 1876<!-- ========= END OF CLASS DATA ========= --> 1877<A NAME="navbar_top"></A> 1878 1879<div id="footer" class="wrap" > 1880 1881 1882 <div id="copyright"> 1883 1884 Except as noted, this content is licensed under <a 1885 href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. 1886 For details and restrictions, see the <a href="/license.html"> 1887 Content License</a>. 1888 </div> 1889 <div id="build_info"> 1890 1891<script src="/timestamp.js" type="text/javascript"></script> 1892<script>document.write(BUILD_TIMESTAMP)</script> 1893 1894 </div> 1895 1896 1897 <div id="footerlinks"> 1898 1899 <p> 1900 <a href="/about/index.html">About Android</a> | 1901 <a href="/legal.html">Legal</a> | 1902 <a href="/support.html">Support</a> 1903 </p> 1904 </div> 1905 1906</div> <!-- end footer --> 1907</div> <!-- jd-content --> 1908 1909</div><!-- end doc-content --> 1910 1911</div> <!-- end body-content --> 1912 1913 1914 1915 1916 1917 1918</body> 1919</html> 1920