Home > Store

Android Wireless Application Development Volume II: Advanced Topics, 3rd Edition

Register your product to gain access to bonus material or receive a coupon.

Android Wireless Application Development Volume II: Advanced Topics, 3rd Edition

Book

  • Sorry, this book is no longer in print.
Not for Sale

Description

  • Copyright 2013
  • Edition: 3rd
  • Book
  • ISBN-10: 0-321-81384-7
  • ISBN-13: 978-0-321-81384-8

Android Wireless Application Development has earned a reputation as the most useful real-world guide to building robust, commercial-grade Android apps. Now, authors Lauren Darcey and Shane Conder have systematically revised and updated this guide for the latest Android SDK and tools updates. To accommodate their extensive new coverage, they’ve split the book into two leaner, cleaner volumes. This Volume II focuses on advanced techniques for the entire app development cycle, including design, coding, testing, debugging, and distribution. Darcey and Conder cover hot topics ranging from tablet development to protecting against piracy and demonstrate advanced techniques for everything from data integration and UI development to in-app billing.

Every chapter has been thoroughly updated to reflect the latest SDKs, tools, and devices. The sample code has been completely overhauled and is available for download on a companion website. Drawing on decades of in-the-trenches experience as professional mobile developers, the authors also provide even more tips and best practices for highly efficient development. This new edition covers

  • Advanced app design with async processing, services, SQLite databases, content providers, intents, and notifications
  • Sophisticated UI development, including input gathering via gestures and voice recognition
  • Developing accessible and internationalized mobile apps
  • Maximizing integrated search, cloud-based services, and other exclusive Android features
  • Leveraging Android 4.0 APIs for networking, web, location services, the camera, telephony, and hardware sensors
  • Building richer apps with 2D/3D graphics (OpenGL ES and RenderScript), animation, and the Android NDK
  • Tracking app usage patterns with Google Analytics
  • Streamlining testing with the Android Debug Bridge

This book is an indispensable resource for every intermediate- to advanced-level Java developer now participating in Android development and for every seasoned mobile developer who wants to take full advantage of the newest Android platform and hardware.

Also look for: Android Wireless Application Development, Volume I: Android Essentials (ISBN: 9780321813831)

Downloads

Downloads

Download free code files here

Sample Content

Online Sample Chapter

Leveraging SQLite Application Databases for Android Wireless Application Development

Sample Pages

Download the sample pages (includes Chapter 3 and Index)

Table of Contents

Introduction     1

Part I: Advanced Android Application Design Principles

Chapter 1: Threading and Asynchronous Processing      9

The Importance of Processing Asynchronously      9

Working with the AsyncTask Class      10

Working with the Thread Class      13

Working with Loaders      14

Understanding StrictMode      14

Summary      15

References and More Information      15

Chapter 2: Working with Services      17

Determining When to Use Services      17

Understanding the Service Lifecycle      18

Creating a Service      18

Controlling a Service      23

Implementing a Remote Interface      24

Implementing a Parcelable Class      26

Using the IntentService Class      29

Summary      33

References and More Information      33

Chapter 3: Leveraging SQLite Application Databases      35

Storing Structured Data Using SQLite Databases      35

Creating a SQLite Database      36

Creating, Updating, and Deleting Database Records      38

Working with Transactions      40

Querying SQLite Databases      41

Closing and Deleting a SQLite Database      46

Designing Persistent Databases      47

Binding Data to the Application User Interface      50

Summary      55

References and More Information      55

Chapter 4: Building Android Content Providers      57

Acting as a Content Provider      57

Implementing a Content Provider Interface      58

Defining the Data URI      59

Defining Data Columns      59

Implementing Important Content Provider Methods      59

Updating the Manifest File      65

Enhancing Applications Using Content Providers      65

Accessing Images on the Device      66

Summary      71

References and More Information      71

Chapter 5: Broadcasting and Receiving Intents      73

Sending Broadcasts      73

Sending Basic Broadcasts      74

Sending Ordered Broadcasts      74

Receiving Broadcasts      75

Registering to Receive Broadcasts      76

Handling Incoming Broadcasts from the System      77

Securing Application Broadcasts      80

Summary      80

References and More Information      81

Chapter 6: Working with Notifications      83

Notifying the User      83

A Word on Compatibility      84

Notifying with the Status Bar      84

Using the NotificationManager Service      85

Creating a Simple Text Notification with an Icon      85

Working with the Notification Queue      86

Updating Notifications      88

Clearing Notifications      90

Vibrating the Phone      91

Blinking the Lights      92

Making Noise      93

Customizing the Notification      94

Designing Useful Notifications      96

Summary      97

References and More Information      97

Part II: Advanced Android User Interface Design Principles

Chapter 7: Designing Powerful User Interfaces      99

Following Android User Interface Guidelines      99

Working with Menus      100

Using Options Menus      100

Using Context Menus      103

Using Popup Menus      105

Enabling Action Bars      105

Building Basic Action Bars      106

Customizing Your Action Bar      110

Handling Application Icon Clicks on the Action Bar      112

Working with Screens That Do Not Require Action Bars      114

Introducing Contextual Action Mode      114

Using Advanced Action Bar Features      114

Working with Styles      114

Building Simple Styles      115

Leveraging Style Inheritance      117

Working with Themes      119

Summary      121

References and More Information      122

Chapter 8: Handling Advanced User Input      123

Working with Textual Input Methods      123

Working with Software Keyboards      123

Working with Text Prediction and User Dictionaries      126

Using the Clipboard Framework      126

Handling User Events      127

Listening for Touch Mode Changes      127

Listening for Events on the Entire Screen      128

Listening for Long Clicks      129

Listening for Focus Changes      130

Working with Gestures      131

Detecting User Motions Within a View      131

Handling Common Single-Touch Gestures      132

Handling Common Multi-Touch Gestures      139

Making Gestures Look Natural      142

Using the Drag and Drop Framework      143

Working with the Trackball      143

Handling Screen Orientation Changes      144

Summary      146

References and More Information      147

Chapter 9: Designing Accessible Applications      149

Exploring the Accessibility Framework      149

Leveraging Speech Recognition Services      151

Leveraging Text-To-Speech Services      155

Summary      158

References and More Information      158

Chapter 10: Best Practices for Tablet and Google TV Development      159

Understanding Device Diversity      159

Don’t Make Assumptions about Device Characteristics      159

Designing Flexible User Interfaces      160

Attracting New Types of Users      161

Leveraging Alternative Resources      161

Using Screen Space Effectively on Big Landscape Screens      161

Developing Applications for Tablets      162

Developing Applications for Google TV      164

Optimizing Web Applications for Google TV      165

Developing Native Android Applications for Google TV      165

Developing Apps for the Amazon Kindle Fire      166

Summary      167

References and More Information      168

Part III: Leveraging Common Android APIs

Chapter 11: Using Android Networking APIs      169

Understanding Mobile Networking Fundamentals      169

Understanding Strict Mode with Networking      170

Accessing the Internet (HTTP)      170

Reading Data from the Web      170

Using HttpURLConnection      171

Parsing XML from the Network      172

Handling Network Operations Asynchronously      174

Retrieving Android Network Status      179

Summary      181

References and More Information      181

Chapter 12: Using Android Web APIs      183

Browsing the Web with WebView      183

Designing a Layout with a WebView Control      184

Loading Content into a WebView Control      184

Adding Features to the WebView Control      186

Managing WebView State      189

Building Web Extensions Using WebKit      190

Browsing the WebKit APIs      190

Extending Web Application Functionality to Android      190

Working with Flash      195

Enabling Flash Applications      195

Building AIR Applications for Android      196

Summary      196

References and More Information      196

Chapter 13: Using Location-Based Services APIs      197

Using Global Positioning Services (GPS)      197

Using GPS Features in Your Applications      198

Determining the Location of the Device      198

Locating Your Emulator      200

Geocoding Locations      200

Mapping Locations      204

Mapping Intents      205

Mapping Views      206

Getting Your Debug API Key      207

Panning the Map View      209

Zooming the Map View      210

Marking the Spot      211

Doing More with Location-Based Services      216

Summary      217

References and More Information      217

Chapter 14: Using Android Multimedia APIs      219

Working with Multimedia      219

Working with the Camera      220

Capturing Still Images Using the Camera      220

Working with Video      229

Working with Face Detection      233

Working with Audio      233

Recording Audio      233

Playing Audio      235

Sharing Audio      236

Searching for Multimedia      236

Working with Ringtones      238

Summary      238

References and More Information      238

Chapter 15: Using Android Telephony APIs      239

Working with Telephony Utilities      239

Gaining Permission to Access Phone State Information      240

Requesting Call State      240

Requesting Service Information      242

Monitoring Signal Strength and Data Connection Speed      243

Working with Phone Numbers      243

Using SMS      244

Gaining Permission to Send and Receive SMS Messages      244

Sending an SMS      245

Receiving an SMS      247

Making and Receiving Phone Calls      248

Making Phone Calls      249

Receiving Phone Calls      251

Working with SIP      251

Summary      251

References and More Information      252

Chapter 16: Accessing Android’s Hardware Sensors      253

Interacting with Device Hardware      253

Using the Device Sensors      254

Working with Different Sensors      254

Configuring the Android Manifest File for Sensors      255

Acquiring a Reference to a Sensor      256

Reading Sensor Data      256

Calibrating Sensors      258

Determining Device Orientation      258

Finding True North      258

Monitoring the Battery      258

Summary      261

References and More Information      261

Chapter 17: Using Android’s Optional Hardware APIs      263

Working with Bluetooth      263

Checking for the Existence of Bluetooth

Hardware      264

Enabling Bluetooth      264

Querying for Paired Devices      265

Discovering Devices      265

Establishing Connections Between Devices      266

Working with USB      267

Working with USB Accessories      268

Working as a USB Host      269

Working with Android Beam      269

Enabling Android Beam Sending      270

Receiving Android Beam Messages      271

Configuring the Manifest File for Android Beam      272

Working with Wi-Fi      273

Introducing Wi-Fi Direct      273

Monitoring Wi-Fi State      274

Summary      276

References and More Information      276

Part IV: Drawing, Animations, and Graphics Programming with Android

Chapter 18: Developing Android 2D Graphics Applications      279

Drawing on the Screen      279

Working with Canvases and Paints      279

Working with Text      284

Using Default Fonts and Typefaces      284

Using Custom Typefaces      285

Measuring Text Screen Requirements      287

Working with Bitmaps      287

Drawing Bitmap Graphics on a Canvas      287

Scaling Bitmap Graphics      287

Transforming Bitmaps Using Matrixes      287

Working with Shapes      289

Defining Shape Drawables as XML Resources      289

Defining Shape Drawables Programmatically      290

Drawing Different Shapes      291

Leveraging Hardware Acceleration Features      297

Controlling Hardware Acceleration      298

Fine-Tuning Hardware Acceleration      298

Summary      299

References and More Information      299

Chapter 19: Working with Animation      301

Exploring Android’s Animation Abilities      301

Working with Frame-by-Frame Animation      302

Working with Tweened Animations      304

Working with Property Animation      309

Working with Different Interpolators      313

Summary      314

References and More Information      314

Chapter 20: Developing Android 3D Graphics Applications      315

Working with OpenGL ES      315

Leveraging OpenGL ES in Android      316

Ensuring Device Compatibility      316

Using OpenGL ES APIs in the Android SDK      317

Handling OpenGL ES Tasks Manually      318

Creating a SurfaceView      318

Starting Your OpenGL ES Thread      319

Initializing EGL      321

Initializing GL      323

Drawing on the Screen      323

Drawing 3D Objects      325

Drawing Your Vertices      325

Coloring Your Vertices      326

Drawing More Complex Objects      327

Lighting Your Scene      329

Texturing Your Objects      331

Interacting with Android Views and Events      333

Enabling the OpenGL Thread to Talk to the Application Thread      333

Enabling the Application Thread to Talk to the OpenGL Thread      335

Cleaning Up OpenGL ES      337

Using GLSurfaceView (Easy OpenGL ES)      337

Using OpenGL ES 2.0      341

Configuring Your Application for OpenGL ES 2.0      341

Requesting an OpenGL ES 2.0 Surface      341

Working with RenderScript      345

Defining RenderScript Functionality      346

Rendering to a Custom View Control      350

Summary      353

References and More Information      353

Chapter 21: Using the Android NDK      355

Determining When to Use the Android NDK      355

Installing the Android NDK      356

Exploring the Android NDK      357

Running an Android NDK Sample Application      357

Creating Your Own NDK Project      357

Calling Native Code from Java      358

Handling Parameters and Return Values      359

Using Exceptions with Native Code      360

Using Native Activities      362

Improving Graphics Performance      362

A Comparison to RenderScript      363

Summary      363

References and More Information      364

Part V: Maximizing Android’s Unique Features

Chapter 22: Extending Android Application Reach      365

Enhancing Your Applications      365

Working with App Widgets      366

Creating an App Widget      367

Installing an App Widget      374

Becoming an App Widget Host      375

Working with Live Wallpapers      375

Creating a Live Wallpaper      376

Creating a Live Wallpaper Service      376

Creating a Live Wallpaper Configuration      378

Configuring the Android Manifest File for Live Wallpapers      379

Installing a Live Wallpaper      379

Acting as a Content Type Handler      381

Determining Intent Actions and MIME Types      382

Implementing the Activity to Process the Intents      383

Registering the Intent Filter      384

Summary      384

References and More Information      384

Chapter 23: Enabling Application Search      385

Making Application Content Searchable      385

Enabling Searches in Your Application      386

Enabling Global Search      395

Summary      398

References and More Information      398

Chapter 24: Working with Cloud to Device Messaging      399

An Overview of C2DM      399

Understanding C2DM Message Flow      400

Understanding the Limitations of the C2DM Service      400

Signing Up for C2DM      401

Incorporating C2DM into Your Applications      402

Exploring the C2DM Sample Applications      403

What Alternatives to C2DM Exist?      403

Summary      404

References and More Information      404

Chapter 25: Managing User Accounts and Synchronizing User Data      405

Managing Accounts with the Account Manager      405

Synchronizing Data with Sync Adapters      406

Using Backup Services      407

Choosing a Remote Backup Service      408

Implementing a Backup Agent      409

Backing Up and Restoring Application Data      412

Summary      414

References and More Information      414

Part VI: Advanced Topics in Application Publication and Distribution

Chapter 26: Internationalizing Your Applications      415

Internationalizing Applications      415

Internationalization Using Alternative Resources      416

Implementing Locale Support Programmatically      421

Publishing Applications for Foreign Users      422

Summary      422

References and More Information      422

Chapter 27: An Overview of Third-Party In-App Billing APIs for Android      423

What Is In-App Billing?      423

Using In-App Billing      424

Leveraging Android Market In-App Billing APIs      425

Leveraging Amazon Appstore In-App Billing APIs      426

Leveraging PayPal Billing APIs      426

Leveraging Other Billing APIs      427

Summary      427

References and More Information      427

Chapter 28: Enabling Application Statistics with Google Analytics      429

Creating a Google Account for Analytics      429

Adding the Library to Your Eclipse Project      431

Collecting Data from Your Applications      432

Logging Different Events      432

Using the Google Analytics Dashboard      433

Gathering eCommerce Information      436

Logging eCommerce Events in Your Applications      436

Reviewing eCommerce Reports      437

Tracking Ad and Market Referrals      438

Gathering Statistics      438

Protecting Users’ Privacy      439

Summary      439

References and More Information      439

Chapter 29: Protecting Applications from Software Piracy      441

All Applications Are Vulnerable      441

Using Secure Coding Practices      442

Obfuscating with ProGuard      442

Configuring ProGuard for Your Android Applications      443

Dealing with Error Reports After Obfuscation      444

Leveraging the License Verification Library      444

Other Anti-Piracy Tips      445

Summary      446

References and More Information      446

Part VII: Appendices

Appendix A: The Android Debug Bridge Quick-Start Guide      447

Listing Connected Devices and Emulators      447

Directing ADB Commands to Specific Devices      448

Starting and Stopping the ADB Server      448

Stopping the ADB Server Process      448

Starting and Checking the ADB Server Process      448

Listing ADB Commands      448

Issuing Shell Commands      449

Issuing a Single Shell Command      449

Using a Shell Session      449

Using the Shell to Start and Stop the Emulator      450

Copying Files      450

Sending Files to a Device or Emulator      450

Retrieving Files from a Device or Emulator      450

Installing and Uninstalling Applications      451

Installing Applications      451

Reinstalling Applications      451

Uninstalling Applications      452

Working with LogCat Logging      452

Displaying All Log Information      452

Including Date and Time with Log Data      452

Filtering Log Information      453

Clearing the Log      454

Redirecting Log Output to a File      454

Accessing the Secondary Logs      455

Controlling the Backup Service      455

Forcing Backup Operations      455

Forcing Restore Operations      456

Wiping Archived Data      456

Generating Bug Reports      456

Using the Shell to Inspect SQLite Databases      456

Using the Shell to Stress Test Applications      456

Letting the Monkey Loose on Your Application      457

Listening to Your Monkey      457

Directing Your Monkey’s Actions      457

Training Your Monkey to Repeat His Tricks      459

Keeping the Monkey on a Leash      459

Learning More About Your Monkey      459

Installing Custom Binaries via the Shell      459

Appendix B: The SQLite Quick-Start Guide      463

Exploring Common Tasks with SQLite      463

Using the sqlite3 Command-Line Interface      464

Launching the ADB Shell      464

Connecting to a SQLite Database      464

Exploring Your Database      465

Importing and Exporting the Database and Its Data      466

Executing SQL Commands on the Command Line      468

Using Other sqlite3 Commands      469

Understanding SQLite Limitations      469

Learning by Example: A Student Grade Database      469

Designing the Student Grade Database Schema      470

Creating Simple Tables with AUTOINCREMENT      470

Inserting Data into Tables      471

Querying Tables for Results with SELECT      471

Using Foreign Keys and Composite Primary Keys      472

Altering and Updating Data in Tables      473

Querying Multiple Tables Using JOIN      474

Using Calculated Columns      474

Using Subqueries for Calculated Columns      476

Deleting Tables      476

Index    477

Updates

Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020