video content http://feed.informer.com/digests/IXOCOEVQJK/feeder video content Respective post owners and feed distributors Thu, 26 May 2016 12:57:40 +0000 Feed Informer http://feed.informer.com/ Why Small Business Owners Hate Going Viral https://www.hongkiat.com/blog/shop-owners-hate-viral/ hongkiat.com urn:uuid:4b4ef208-6cfc-b723-ba83-0f5be2cef717 Sun, 28 Apr 2024 13:00:13 +0000 <p>While going viral can seem like a dream come true for most businesses, it often brings a wave of challenges that many shop owners dread. Whether you run an e-commerce platform or a physical store, the sudden surge in customers can be as daunting as it is exciting. Let’s explore why some business owners are&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/shop-owners-hate-viral/">Why Small Business Owners Hate Going Viral</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>While going viral can seem like a dream come true for most businesses, it often brings a wave of challenges that many shop owners dread. Whether you run an e-commerce platform or a physical store, the sudden surge in customers can be as daunting as it is exciting. </p> <p>Let’s explore why some business owners are apprehensive about their store becoming a viral sensation.</p> <div class="ref-block ref-block--post" id="ref-post-1"> <a href="https://www.hongkiat.com/blog/freelance-business-tools/" class="ref-block__link" title="Read More: 10 Essential Tools to Manage Your Freelance Business Better" rel="bookmark"><span class="screen-reader-text">10 Essential Tools to Manage Your Freelance Business Better</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/freelance-business-tools.jpg" }'> <noscript> <style>.no-js #ref-block-post-17846 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/freelance-business-tools.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">10 Essential Tools to Manage Your Freelance Business Better</h4> <p class="ref-description"> Looking to manage your freelance work better? Check out these 10 tools for accounting, collaboration, and more." <span>Read more</span></p> </div> </div> <h4>1. Demand Overwhelms Supply</h4> <p>Most physical stores have a fixed amount of inventory which includes either finished products or raw materials required for production. These are typically planned based on expected weekly and monthly sales, and sudden viral fame can disrupt this delicate balance.</p> <h5>Fullfilling All Orders</h5> <p>If you choose to fulfill all incoming orders during a viral surge, you may find your shelves empty far sooner than anticipated. Reordering stock usually isn’t a quick process, and during the replenishment period, you might have to turn away customers. </p> <p>This can pontentially damage your shop’s reputation, as potential customers leave disappointed by the lack of availability.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/overwhelming-demand.jpg" alt="overwhelming demand" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="overwhelming demand" width="1500" height="1000" data-lazy-src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/overwhelming-demand.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1500px"></span></span></figure> <h5>Limiting Purchases to Manage Stock</h5> <p>Another strategy might be to limit the number of purchases each customer can make per day to manage inventory better. This approach ensures that you don’t run out of stock entirely and that a larger number of customers can purchase something. </p> <p>However, this can still lead to customer frustration for those who find the daily cap too restrictive and might have to return another day to make a purchase, potentially harming your shop’s reputation in the process.</p> <h4>2. Workload Increases with More Orders</h4> <p>Going viral is rarely anticipated, and most shop owners might find themselves completely unprepared for the sudden explosion in popularity. The first hint often comes as a shock – a drastic spike in orders.</p> <p>If a typical day at your shop involves managing around 80 orders, and your maximum capacity under normal circumstances is estimated at 200 orders, imagine the chaos when this number doubles to 400 or more due to viral attention. This increase means significantly more work for you and your staff. Tasks range from fulfilling orders to managing customer inquiries and everything in between.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/shipping-orders.jpg" alt="shipping orders" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="shipping orders" width="1500" height="967" data-lazy-src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/shipping-orders.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:64%;max-width:1500px"></span></span></figure> <p>With such an influx, the existing workforce may need to put in extra hours. The questions then arise: </p> <p><em>Should you hire temporary staff to cope with the demand?</em> Or, <em>do you risk customer satisfaction by potentially delaying orders?</em></p> <p>These decisions are stressful and not something most shop owners want to face.</p> <h4>3. Higher Error Rate</h4> <p>In environments where there is a sudden surge in orders, the pace of work naturally accelerates to meet the higher demand. This rapid pace can significantly increase the likelihood of errors, particularly when staff are pushed to their limits by time constraints.</p> <p>The rush to fulfill an increased volume of orders can lead to mistakes such as the wrong items being packed or orders being mixed up. These errors not only affect customer satisfaction but also increase the cost of returns and reshipping.</p> <p>Increased order volumes can overwhelm your customer service team, leading to slower response times for customer inquiries. This can frustrate customers and result in complaints, further impacting your business’s reputation.</p> <h4>4. Decreased Employee Morale and Efficiency</h4> <p>The stress of having to work faster, along with the frustration of dealing with more frequent mistakes, can lead to decreased morale among staff. Low morale often manifests as reduced enthusiasm for work, decreased productivity, and a higher rate of employee turnover. </p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/demotivated-employee.jpg" alt="demotivated employee" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="demotivated employee" width="1500" height="1000" data-lazy-src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/demotivated-employee.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1500px"></span></span></figure> <p>All of these factors can create a cycle of negativity and inefficiency in the workplace.</p> <h4> 5. Challenges in Sales and Inventory Planning</h4> <p>Shop owners typically utilize monthly or quarterly sales data to forecast inventory requirements and measure the success of their advertising campaigns. This systematic planning is crucial to ensure sufficient stock levels are maintained based on expected demand, and to evaluate the return on investment (ROI) from advertising efforts.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/checking-inventory.jpg" alt="checking inventory" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="checking inventory" width="1500" height="1000" data-lazy-src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/checking-inventory.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1500px"></span></span></figure> <p>However, when a shop goes viral unexpectedly, particularly near the end of a month with the trend spilling over into the following month, it can severely distort these metrics.</p> <h4>Shop Owners Who Love Going Viral</h4> <p>Not all businesses fear the prospect of going viral. For owners of certain types of shops, such as those involved in drop shipping or selling digital products, viral popularity can indeed be purely beneficial.</p> <p>In drop shipping, the shop owner acts merely as a middleman; they don’t keep products in stock. Instead, all orders are automatically redirected to the supplier who handles the inventory, packaging, and shipping. This model eliminates the need for the shop to maintain inventory, thereby removing the risk of stock depletion regardless of order volume. As orders increase due to viral success, the system efficiently scales up since the logistical responsibility lies with the supplier, not the shop owner.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/going-viral-social-media.jpg" alt="going viral social media" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="going viral social media" width="1500" height="1000" data-lazy-src="https://assets.hongkiat.com/uploads/shop-owners-hate-viral/going-viral-social-media.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1500px"></span></span></figure> <p>Selling digital products such as <a href="https://www.hongkiat.com/blog/20-best-websites-to-download-free-e-books/">eBooks</a>, software, or any downloadable item provides a unique advantage. These products, once created, can be sold infinitely without ever running out of stock. Viral popularity means that more customers are directed to the shop’s digital shelves, which can handle an unlimited number of transactions without any need for restocking or additional overhead costs.</p> <div class="ref-block ref-block--post" id="ref-post-2"> <a href="https://www.hongkiat.com/blog/services-sell-digital-products/" class="ref-block__link" title="Read More: 5 Best Online Services to Sell Digital Products Effortlessly" rel="bookmark"><span class="screen-reader-text">5 Best Online Services to Sell Digital Products Effortlessly</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/services-sell-digital-products.jpg" }'> <noscript> <style>.no-js #ref-block-post-19325 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/services-sell-digital-products.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">5 Best Online Services to Sell Digital Products Effortlessly</h4> <p class="ref-description"> These days, everyone can be a creator. Technology has democratized the creative process, and almost anyone can now... <span>Read more</span></p> </div> </div> <h4>Final Thoughts</h4> <p>Going viral is a double-edged sword for small businesses. On one hand, it can dramatically increase exposure and sales overnight. On the other, it can deplete inventory, overwhelm staff, and disrupt planned strategies, potentially frustrating customers and taxing internal resources.</p> <p>For businesses engaged in drop shipping or digital products, viral growth carries fewer risks and more benefits, highlighting how different models can impact outcomes.</p> <p>Ultimately, the key to leveraging viral success lies in preparedness and adaptability. Balancing the challenges with strategic responses and flexible operations can make all the difference in capitalizing on the opportunities that viral moments present. Whether it’s a boon or a challenge, being ready for the surge is crucial. But hey, if your shop goes viral, it’s still a happy problem to have.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/shop-owners-hate-viral/">Why Small Business Owners Hate Going Viral</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> E-Commerce Hongkiat.com Freepik Pikaso AI Image Generator (Review) https://www.hongkiat.com/blog/pikaso-freepik-ai-image-generator/ hongkiat.com urn:uuid:f42aca27-d8cf-65cb-0d3c-627e73834329 Thu, 25 Apr 2024 10:00:30 +0000 <p>There’s really no shortage of AI image generators these days, but here’s one worth mentioning. Pikaso, by Freepik, a free image downloading site, offers several unique features. This tool provides three main functionalities: it allows users to create images using prompts, reimagine an existing image, and generate an AI image from doodles. Additionally, an image&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/pikaso-freepik-ai-image-generator/">Freepik Pikaso AI Image Generator (Review)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>There’s really no shortage of AI image generators these days, but here’s one worth mentioning. </p> <p><a rel="noopener" target="_blank" href="https://www.freepik.com/https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/">Pikaso</a>, by <a rel="noopener" target="_blank" href="https://www.freepik.com/ai">Freepik</a>, a free image downloading site, offers several unique features. This tool provides three main functionalities: it allows users to create images using prompts, reimagine an existing image, and generate an AI image from doodles. Additionally, an image upscaling feature is in development and will be available soon. </p> <p>We have thoroughly tested all its features and in this post, we’re going to share our insights.</p> <h4>Pikaso, In a Nutshell</h4> <p>Pikaso starts off as an <a rel="nofollow noopener" target="_blank" href="https://www.freepik.com/ai/image-generator">AI image generator</a>, similar to popular tool like <a href="https://www.hongkiat.com/blog/midjourney-prompt-builders-guides/">Midjourney</a> and <a href="https://www.hongkiat.com/blog/dall-e-3-chatgpt/">DALL-E</a>. Users provide a prompt, and Pikaso delivers an image based on that input. </p> <p>Additionally, the <a href="#reimagine" rel="nofollow noopener" target="_blank">Reimagine</a> feature allows users to upload an image and see several variations of it, much like selecting from different versions (V1, V2, etc.) in Midjourney. The <a rel="nofollow noopener" target="_blank" href="https://www.freepik.com/ai/pikaso-ai-drawing">Sketch to Image</a> feature converts basic sketches or doodles into more complete and realistic images.</p> <p>Now, let’s go through these features one by one.</p> <h4 id="ai_image_generator">AI Image Generator</h4> <p>First off, let’s talk about the <em>AI image generator</em> feature. If you’ve played with any <a href="https://www.hongkiat.com/blog/ai-art-generators/">AI-based image generating tools</a> before, you’ll find the process familiar. You start by entering a prompt, and voila, you get your image.</p> <p>What makes Pikaso stand out is its easy-to-use UI, which lets you tweak several settings before creating your image, such as:</p> <ul> <li>Choosing the number of image variations, up to four for free accounts</li> <li>Selecting your image dimensions (1:1, 2:3, 9:16, etc.)</li> <li>Adjusting style, color, framing, and lighting</li> </ul> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/ai-image-generator-settings.jpg" alt="AI Image generator settings" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="AI Image generator settings" width="1500" height="610" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/ai-image-generator-settings.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:40%;max-width:1500px"></span></span></figure> <p>Here’s an example using the prompt “<em>capybara on top of a turtle</em>“, with the following settings:</p> <ul> <li><strong>Style:</strong> Cartoon</li> <li><strong>Color:</strong> Pastel</li> <li><strong>Framing:</strong> Close Up</li> <li><strong>Lighting:</strong> Studio</li> </ul> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/capybara-on-top-of-turtle.jpg" alt="Capybara on top of turle" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Capybara on top of turle" width="1500" height="712" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/capybara-on-top-of-turtle.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:47%;max-width:1500px"></span></span></figure> <p>And hovering over any of the created images, you have the options to:</p> <ul> <li>Download them</li> <li>Save them to a creation, or </li> <li><em>Reimagine</em> them, which we’ll dive into more detail in the following section</li> </ul> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-image.jpg" alt="Reimagined AI image options" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Reimagined AI image options" width="731" height="497" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-image.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:67%;max-width:731px"></span></span></figure> <h4 id="reimagine">Reimagine</h4> <p>Next, the <em>Reimagine</em> feature. This allows you to reimagine images you’ve created with the “AI Image Generator” feature, or you can upload your own images via drag and drop.</p> <p>Right after you upload an image, it automatically generates 15 different variations of your image.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-feature.jpg" alt="Generated image variations preview" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Generated image variations preview" width="1500" height="1006" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-feature.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:67%;max-width:1500px"></span></span></figure> <p>Looking at the sidebar under “<strong>Custom</strong>“, you’ll find it tries to suggest a prompt based on the uploaded image.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-prompt.jpg" alt="Sidebar prompt suggestion" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Sidebar prompt suggestion" width="936" height="572" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-prompt.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:61%;max-width:936px"></span></span></figure> <p>This sidebar also offers you the ability to adjust the Style and Imagination settings. After making your selections, clicking “<strong>Reimagine</strong>” generates new variations of your images based on these preferences.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/sidebar-settings.jpg" alt="Reimagine sidebar settings" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Reimagine sidebar settings" width="1128" height="1296" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/sidebar-settings.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:114%;max-width:1128px"></span></span></figure> <p>To test its capabilities, we set the Style to “<strong>Digital Art</strong>” and selected ‘Wild’ for Imagination. </p> <p>Here’s what we got.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-output.jpg" alt="Digital Art styled reimagination" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Digital Art styled reimagination" width="1500" height="511" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/reimagine-output.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:34%;max-width:1500px"></span></span></figure> <h4 id="sketch_to_image">Sketch to Image</h4> <p>Last but not least, the <em>Sketch to Image</em> feature, as its name suggests, turns your sketch or doodle into a realistic photo.</p> <p>First, describe your idea in the prompt bar at the top of the page.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/describe-prompt.jpg" alt="Prompt bar for sketch description" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Prompt bar for sketch description" width="1427" height="336" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/describe-prompt.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:23%;max-width:1427px"></span></span></figure> <p>Then start sketching by using the brush, or add icons and images, and watch as your image slowly comes to life.</p> <figure><img src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/sketch-image.jpg" alt="Sketching process in action"></figure> <p>Once you’re done, you can choose to either enhance the image, create multiple variations of the image, or copy the created image back to the sketching side to further refine your drawing.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/sketch-to-image-output.jpg" alt="Final sketch to image output" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Final sketch to image output" width="1500" height="1125" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/sketch-to-image-output.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1500px"></span></span></figure> <h4>Pricing Details</h4> <p>Pikaso offers its services for free, but there are certain conditions. </p> <p>To access the platform, you need to create an account. Even with a free account, your usage is capped daily. </p> <p>For instance, free account holders can download up to 10 images, perform 20 AI text-to-image conversions, and have limited access to the <em>Sketch to Image</em> feature each day.</p> <p>It’s also noteworthy that during our free trial, we received an additional 20 images as a bonus for signing up on the first day.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/first-day-free-20-images.jpg" alt="Bonus 20 images on first day sign-up" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Bonus 20 images on first day sign-up" width="1266" height="266" data-lazy-src="https://assets.hongkiat.com/uploads/pikaso-freepik-ai-image-generator/first-day-free-20-images.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:21%;max-width:1266px"></span></span></figure> <p>Upgrading to a Premium account lifts all the limitations mentioned. It also allows unlimited access to Freepik’s image library, ad-free browsing, and access to <a rel="noopener nofollow" target="_blank" href="https://www.flaticon.com/">Flaticon.com</a>.</p> <p>Premium subscription rates begin at $24 USD per month or $144 USD annually.</p> <h4>Final Thoughts</h4> <p>So, what do we think? On first impression, as an AI image generator, it performs great, delivering quick image generation. It offers more variation of AI generated images compared to Midjourney or DALL-E, allowing one (or us in this case) to swiftly select styles and other settings before generating an image.</p> <p>The <em>Reimagine</em> feature is also quite handy, offering generous variation of re-imagined images.</p> <p>However, the <em>Sketch to Image</em> feature wasn’t much to our liking, mainly because we are not inclined towards drawing and doodling, but we believe this feature could be handy and useful for those who are.</p> <p>Regarding its price, let’s compare it with Midjourney and DALL-E.</p> <p>Midjourney’s most affordable plan costs $10 a month, or $96 a year, providing about 3.3 hours/month of fast GPU time. Pikaso is slightly more expensive, but as mentioned above, it is capable of providing more variations, with options to pre-determine styles, colors, and others before creating an image, and much more.</p> <p>DALL-E is included with the ChatGPT subscription, which costs $20/month, definitely on the higher side in terms of cost. However, to be fair, DALL-E is just part of what you can do with ChatGPT.</p> <p>So, what does it come down to?</p> <p>In our opinion, if you are in need of constantly editing and creating AI images, yes, it’s worth it and it may even replace Midjourney if you are already using one. If you’re creating AI images for leisure and entertainment, no, at least not until you find a legitimate reason, else a free account with daily limits will work just fine for now.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/pikaso-freepik-ai-image-generator/">Freepik Pikaso AI Image Generator (Review)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> Internet Artificial Intelligence bc Hongkiat.com How to Play Pokémon Go Without Moving (No Jailbreak Required) https://www.hongkiat.com/blog/moving-in-pokemon-go-no-jailbreak/ hongkiat.com urn:uuid:8c37a7bc-cdd2-fc47-c4c3-2f047f720148 Thu, 25 Apr 2024 07:00:11 +0000 <p>Pokémon Go is a mobile game where players use their smartphones to locate and catch Pokémon in real-world locations. Everyone loves it, but there’s one small catch: not everyone can roam outdoors. What if you could enjoy the game from the comfort of your home while still exploring different locations? Yes, it’s possible! Here’s how&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/moving-in-pokemon-go-no-jailbreak/">How to Play Pok&eacute;mon Go Without Moving (No Jailbreak Required)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Pokémon Go is a mobile game where players use their smartphones to locate and catch Pokémon in real-world locations. Everyone loves it, but there’s one small catch: not everyone can roam outdoors.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/how-to-play-pokemon-go-without-moving-in-2024-no-jailbreak.jpg" alt="Play Pokémon Go from home tips" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Play Pokémon Go from home tips" width="1500" height="750" data-lazy-src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/how-to-play-pokemon-go-without-moving-in-2024-no-jailbreak.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:50%;max-width:1500px"></span></span></figure> <p>What if you could enjoy the game from the comfort of your home while still exploring different locations? Yes, it’s possible! Here’s how you can do it.</p> <p>Please be aware that performing this action is considered cheating in the game of sort. We are not encouraging you to do so; we are simply demonstrating that it is possible.</p> <h4>Can You Trick the Game into Thinking You’re Walking?</h4> <p>In short, yes.The easiest method is to simply shake or move your phone slightly. This movement can fool the game into believing you are walking.</p> <p>Additionally, there are other methods as well. In brief, you can use location spoofing apps to manipulate your phone’s location, making it appear as if you’re moving in the game when you’re not.</p> <h4>Play Pokemon Go on iOS Without Moving in iOS</h4> <p>Here are two apps that allow iOS users to play Pokémon GO without moving.</p> <h5><a rel="nofollow noopener" target="_blank" href="https://www.tenorshare.com/purchase/buy-ianygo-ios-app.html">Tenorshare iAnyGo</a></h5> <figure><img src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/tenorshare-iAnyGo.jpg" alt="Screenshot of Tenorshare iAnyGo app interface"></figure> <p>First and foremost, let’s talk about Tenorshare iAnyGo. This app enables iOS users to navigate within Pokémon Go without physically moving. Moreover, it doesn’t require jailbreaking or rooting your phone.</p> <p><strong>Features of Tenorshare iAnyGo</strong></p> <p>Features that makes Tenorshare iAnyGo a great pick as follows:</p> <ul> <li>It allows you to change your GPS location to anywhere in the world for free, and as mentioned, without the need for jailbreaking or rooting your device.</li> <li>The included GPS joystick gives players flexible control over their movement direction in games.</li> <li>The tool’s capabilities are not limited to just Pokémon Go. It also works on other location-based applications. </li> </ul> <p><strong>How to Use Tenorshare iAnyGo</strong>:</p> <ol class="steps"> <li>Open the iAnyGo tool and choose the “Change Location” mode.</li> <li>Connect your iPhone or Android device to your computer.</li> <li>Select your desired location on the map and start modifying it.</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/select-your-preferred-location-on-the-map-and-start-to-modify.jpg" alt="Choosing location on map interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Choosing location on map interface" width="1500" height="750" data-lazy-src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/select-your-preferred-location-on-the-map-and-start-to-modify.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:50%;max-width:1500px"></span></span></figure> </ol> <p><strong>Pros:</strong></p> <ul> <li>Switching locations is quick and effortless.</li> <li>Throughout the trial period, you can use each mode for free up to three times.</li> </ul> <p><strong>Cons:</strong></p> <ul> <li>App only works on iOS devices.</li> </ul> <h5><a rel="nofollow noopener" target="_blank" href="https://nordvpn.com/">Nord VPN</a></h5> <p>Speaking of changing your location, another excellent method is to use a VPN, and in this case, Nord VPN is a great choice. Nord VPN masks your current IP address, keeping it hidden by routing your connection through a different proxy server. Through this process, your IP and real location are concealed, making it appear as if you are in a different location.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/nord-vpn.jpg" alt="Nord VPN application screenshot" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Nord VPN application screenshot" width="1111" height="747" data-lazy-src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/nord-vpn.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:67%;max-width:1111px"></span></span></figure> <p>However, NordVPN isn’t exactly free. To use it to mask your current location, you might need to pay around $3 a month.</p> <h4>Play Pokemon Go on iOS Without Moving in Android</h4> <p>Next, here are a few options for Android users to consider.</p> <h5><a rel="nofollow noopener" target="_blank" href="https://www.pgsharp.com/">PGsharp</a></h5> <p>PGsharp is widely regarded as one of the best Pokémon Go tools for Android. It’s compatible with both rooted and unrooted Android devices. PGsharp offers a free version that costs nothing, as well as a Standard version available for $5 a month, which includes additional features such as quick catch, fast map loading, and the ability to discard items in Pokémon Go, among others.</p> <p>This tool has a mixed bag of reviews, so I encourage you to read some online reviews or at least try the free version before committing to a subscription.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/PGsharp.jpg" alt="PGsharp tool interface screenshot" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="PGsharp tool interface screenshot" width="1200" height="1034" data-lazy-src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/PGsharp.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:86%;max-width:1200px"></span></span></figure> <p><strong>How to use PGsharp:</strong></p> <ol class="steps"> <li>First, uninstall the Pokémon Go app from your device.</li> <li>Next, visit the official PGsharp website and download the version that’s suitable for your device.</li> <li>Open your file manager app and locate the Downloads folder. Tap on the downloaded APK file to begin the installation.</li> <li>Finally, open the Pokémon Go app and make sure to set your birth year to indicate that you are over 18.</li> </ol> <h5><a rel="nofollow noopener" target="_blank" href="https://www.pogoskill.com/">PoGoskill</a></h5> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/PoGoskill.jpg" alt="PoGoSkill app user interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="PoGoSkill app user interface" width="1440" height="845" data-lazy-src="https://assets.hongkiat.com/uploads/moving-in-pokemon-go-no-jailbreak/PoGoskill.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:58%;max-width:1440px"></span></span></figure> <p>The second and final app for Android users featured on our list is PoGoSkill. This app also allows players to simulate their GPS locations, enabling them to access various regions and catch rare Pokémon without having to move physically. PoGoSkill is available for both Android and iOS users.</p> <p>To learn more about how PoGoSkill works, check out <a rel="nofollow noopener" target="_blank" href="https://www.pogoskill.com/">this page</a>.</p> <h4>Conclusion</h4> <p>Here you go, wrapping up our discussion: there are four apps, two for iOS and two for Android, that let you move in Pokémon Go without actually moving. As mentioned earlier, this practice, known as spoofing, is technically considered cheating. Players caught using these methods may face penalties, including temporary suspensions or even permanent bans from the game. So, is it worth trying?</p> <p>You could experiment with one of the mentioned apps, like Tenorshare iAnyGo, for experimental purposes. However, if you’re planning on enjoying the game for the long haul, it’s wise to stick to the rules. For a fair and enjoyable experience, the best way to play Pokémon Go is as it was intended, which means physically exploring different locations.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/moving-in-pokemon-go-no-jailbreak/">How to Play Pok&eacute;mon Go Without Moving (No Jailbreak Required)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> Mobile bc pokemon go Hongkiat.com How to Create a Personalized AI Assistant with OpenAI https://www.hongkiat.com/blog/create-chatbot-with-openai/ hongkiat.com urn:uuid:8c324b52-ced2-18a6-21df-5f76d22a0871 Wed, 24 Apr 2024 13:00:50 +0000 <p>We've created an AI assistant to help answer basic queries about our blog posts. Here's how we did it.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/create-chatbot-with-openai/">How to Create a Personalized AI Assistant with OpenAI</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Imagine having your own virtual assistant, kind of like J.A.R.V.I.S from the Iron Man movie, but personalized for your needs. This AI assistant is designed to help you tackle routine tasks or anything else you teach it to handle.</p> <p>In this article, we’ll show you <a href="#demo">an example</a> of what our trained AI assistant can achieve. We’re going to create an AI that can provide basic insights into our site’s content, assisting us in managing both the site and its content more effectively.</p> <p>To build this, we’ll use three main stacks: <a rel="noopener" target="_blank" href="https://openai.com/">OpenAI</a>, <a rel="noopener" target="_blank" href="https://langchain.com">LangChain</a>, and <a rel="noopener" target="_blank" href="https://nextjs.org/">Next.js</a>.</p> <h4>OpenAI</h4> <p>OpenAI, if you don’t already know, is an AI research organization known for their <a rel="noopener nofollow" target="_blank" href="https://chat.openai.com/">ChatGPT</a>, which can generate human-like responses. They also provide an API that allows developers to access these AI capabilities to build their own applications.</p> <p>To get your API key, you can sign up on the <a rel="noopener nofollow" target="_blank" href="https://platform.openai.com/">OpenAI Platform</a>. After signing up, you can create a key from the <strong>API keys</strong> section of your dashboard.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/openai-apikey.jpg" alt="A white dashboard showing the list of menu and a button to generate the API key" srcset="" sizes=""></noscript><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="A white dashboard showing the list of menu and a button to generate the API key" width="720" height="220" data-lazy-src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/openai-apikey.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:30%;max-width:720px"></span></span></figure> <div class="sue-icon-text su-image-caption" data-url="" data-target="self" style="min-height:34px;padding-left:36px;color:#333333"> <div class="sue-icon-text-icon" style="color:#333333;font-size:24px;width:24px;height:24px"><i class="sui sui-photo" style="font-size:24px;color:#333333"></i></div> <div class="sue-icon-text-content su-u-trim" style="color:#333333">API keys section on the OpenAI platform dashboard.</div> <div style="clear:both;height:0"></div> </div> <p>Once you’ve generated an API key, you have to put it in your computer as an environment variable and name it <code>OPENAI_API_KEY</code>. This is a standard name that libraries like <strong>OpenAI</strong> and <strong>LangChain</strong> look for, so you don’t need to pass it manually later on.</p> <p>Do note that Windows, macOS, and Linux each have their own way to set an environment variable.</p> <h5>Windows</h5> <ol class="steps"> <li>Right-click on “<strong>This PC</strong>” or “<strong>My Computer</strong>” and select “<strong>Properties</strong>“.</li> <li>Click on “<strong>Advanced system settings</strong>” on the left sidebar.</li> <li>In the System Properties window, click on the “<strong>Environment Variables</strong>” button.</li> <li>Under “<strong>System variables</strong>” or “<strong>User variables</strong>“, click “<strong>New</strong>” and enter the name, <code>OPENAI_API_KEY</code>, and value of the environment variable.</li> </ol> <h5>macOS and Linux</h5> <p>To set a permanent variable, add the following to your shell configuration file such as <code>~/.bash_profile</code>, <code>~/.bashrc</code>, <code>~/.zshrc</code>.</p> <pre> export OPENAI_API_KEY=value </pre> <h4>LangChain</h4> <p><strong>LangChain</strong> is a system that helps computers understand and work with human language. In our case, it provides tools that will help us convert text documents into numbers.</p> <p>You might wonder, <em>why do we need to do this?</em></p> <p>Basically, AI, machines, or computers are good at working with numbers but not with words, sentences, and their meanings. So we need to convert words into numbers. </p> <p>This process is called <strong>embedding</strong>.</p> <p> It makes it easier for computers to analyze and find patterns in language data, as well as helps to understand the semantics of the information they are given from a human language.</p> <figure class="border-solid-1"><img src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/embedding-vectors-process.jpg" alt="A diagram showing the process of embedding words 'fancy cars' into numbers from left to right"></figure> <p>For example, let’s say a user sends a query about “<em>fancy cars</em>“. Rather than trying to find the exact words from the information source, it would probably understand that you are trying to search for Ferrari, Maserati, Aston Martin, Mercedes Benz, etc.</p> <h4>Next.js</h4> <p>We need a framework to create a user interface so users can interact with our chatbot. </p> <p>In our case, Next.js has everything we need to get our chatbot up and running for the end-users. We will build the interface using a React.js UI library, <a rel="noopener" target="_blank" href="https://ui.shadcn.com/">shadcn/ui</a>. It has a route system for creating an API endpoint. </p> <p>It also provides <a rel="noopener" target="_blank" href="https://www.npmjs.com/package/ai">an SDK</a> that will make it easier and quicker to build chat user interfaces.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/shadcn.jpg" alt="" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" width="721" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/shadcn.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:721px"></span></span></figure> <h4>Data and Other Prerequisites</h4> <p>Ideally, we’ll also need to prepare some data ready. These will be processed, stored in a Vector storage and sent to OpenAI to give more info for the prompt. </p> <p>In this example, to make it simpler, I’ve made a JSON file with a list of title of a blog post. You can find them <a rel="noopener" target="_blank" href="https://github.com/hongkiat/ai-assistant/blob/main/data">in the repository</a>. Ideally, you’d want to retrieve this information directly from the database.</p> <p>I assume you have a fair understanding of working with JavaScript, React.js, and NPM because we’ll use them to build our chatbot. </p> <p>Also, make sure you have Node.js installed on your computer. You can check if it’s installed by typing:</p> <pre>node -v</pre> <p>If you don’t have Node.js installed, you can follow the instructions on the <a rel="noopener" target="_blank" href="https://nodejs.org/en/download/">official website</a>.</p> <h4>How’s Everything Going to Work?</h4> <p>To make it easy to understand, here’s a high-level overview of how everything is going to work:</p> <ol class="steps"> <li>The user will input a question or query into the chatbot.</li> <li>LangChain will retrieve related documents of the user’s query.</li> <li>Send the prompt, the query, and the related documents to the OpenAI API to get a response.</li> <li>Display the response to the user.</li> </ol> <p>Now that we have a high-level overview of how everything is going to work, let’s get started!</p> <h4>Installing Dependencies</h4> <p>Let’s start by installing the necessary packages to build the user interface for our chatbot. Type the following command:</p> <pre> npx create-next-app@latest ai-assistant --typescript --tailwind --eslint </pre> <p>This command will install and set up Next.js with <strong>shadcn/ui</strong>, TypeScript, <a rel="noopener" target="_blank" href="https://tailwindcss.com/">Tailwind CSS</a>, and ESLint. It may ask you a few questions; in this case, it’s best to select the default options.</p> <p>Once the installation is complete, navigate to the project directory:</p> <pre> cd ai-assistant </pre> <p>Next, we need to install a few additional dependencies, such as <a rel="noopener" target="_blank" href="https://www.npmjs.com/package/ai">ai</a>, <a rel="noopener" target="_blank" href="https://www.npmjs.com/package/openai">openai</a>, and <a rel="noopener" target="_blank" href="https://www.npmjs.com/package/langchain">langchain</a>, which were not included in the previous command.</p> <pre> npm i ai openai langchain @langchain/openai remark-gfm </pre> <h4>Building the Chat Interface</h4> <p>To create the chat interface, we’ll use some pre-built components from <strong>shadcn/ui</strong> like the <a rel="noopener" target="_blank" href="https://ui.shadcn.com/docs/components/button">button</a>, <a rel="noopener" target="_blank" href="https://ui.shadcn.com/docs/components/avatar">avatar</a>, and <a rel="noopener" target="_blank" href="https://ui.shadcn.com/docs/components/input">input</a>. Fortunately, adding these components is easy with <strong>shadcn/ui</strong>. Just type:</p> <pre> npx shadcn-ui@latest add scroll-area button avatar card input </pre> <p>This command will automatically pull and add the components to the <code>ui</code> directory.</p> <p>Next, let’s make a new file named Chat.tsx in the src/components directory. This file will hold our chat interface.</p> <p>We’ll use the ai package to manage tasks such as capturing user input, sending queries to the API, and receiving responses from the AI.</p> <p>The OpenAI’s response can be plain text, HTML, or Markdown. To format it into proper HTML, we’ll use the <a rel="noopener" target="_blank" href="https://www.npmjs.com/package/remark-gfm">remark-gfm</a> package.</p> <p>We’ll also need to display avatars within the Chat interface. For this tutorial, I’m using <a rel="noopener" target="_blank" href="https://www.avatartion.com/">Avatartion</a> to generate avatars for both the AI and the user. These avatars are stored in the <code>public</code> directory.</p> <p>Below is the code we’ll add to this file.</p> <pre> 'use client'; import { Avatar, AvatarFallback, AvatarImage } from '@/ui/avatar'; import { Button } from '@/ui/button'; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from '@/ui/card'; import { Input } from '@/ui/input'; import { ScrollArea } from '@/ui/scroll-area'; import { useChat } from 'ai/react'; import { Send } from 'lucide-react'; import { FunctionComponent, memo } from 'react'; import { ErrorBoundary } from 'react-error-boundary'; import ReactMarkdown, { Options } from 'react-markdown'; import remarkGfm from 'remark-gfm'; /** * Memoized ReactMarkdown component. * The component is memoized to prevent unnecessary re-renders. */ const MemoizedReactMarkdown: FunctionComponent&lt;Options&gt; = memo( ReactMarkdown, (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.className === nextProps.className ); /** * Represents a chat component that allows users to interact with a chatbot. * The component displays a chat interface with messages exchanged between the user and the chatbot. * Users can input their questions and receive responses from the chatbot. */ export const Chat = () =&gt; { const { handleInputChange, handleSubmit, input, messages } = useChat({ api: '/api/chat', }); return ( &lt;Card className="w-full max-w-3xl min-h-[640px] grid gap-3 grid-rows-[max-content,1fr,max-content]"&gt; &lt;CardHeader className="row-span-1"&gt; &lt;CardTitle&gt;AI Assistant&lt;/CardTitle&gt; &lt;/CardHeader&gt; &lt;CardContent className="h-full row-span-2"&gt; &lt;ScrollArea className="h-full w-full"&gt; {messages.map((message) =&gt; { return ( &lt;div className="flex gap-3 text-slate-600 text-sm mb-4" key={message.id} &gt; {message.role === 'user' && ( &lt;Avatar&gt; &lt;AvatarFallback&gt;U&lt;/AvatarFallback&gt; &lt;AvatarImage src="/user.png" /&gt; &lt;/Avatar&gt; )} {message.role === 'assistant' && ( &lt;Avatar&gt; &lt;AvatarImage src="/kovi.png" /&gt; &lt;/Avatar&gt; )} &lt;p className="leading-relaxed"&gt; &lt;span className="block font-bold text-slate-700"&gt; {message.role === 'user' ? 'User' : 'AI'} &lt;/span&gt; &lt;ErrorBoundary fallback={ &lt;div className="prose prose-neutral"&gt; {message.content} &lt;/div&gt; } &gt; &lt;MemoizedReactMarkdown className="prose prose-neutral prose-sm" remarkPlugins={[remarkGfm]} &gt; {message.content} &lt;/MemoizedReactMarkdown&gt; &lt;/ErrorBoundary&gt; &lt;/p&gt; &lt;/div&gt; ); })} &lt;/ScrollArea&gt; &lt;/CardContent&gt; &lt;CardFooter className="h-max row-span-3"&gt; &lt;form className="w-full flex gap-2" onSubmit={handleSubmit}&gt; &lt;Input maxLength={1000} onChange={handleInputChange} placeholder="Your question..." value={input} /&gt; &lt;Button aria-label="Send" type="submit"&gt; &lt;Send size={16} /&gt; &lt;/Button&gt; &lt;/form&gt; &lt;/CardFooter&gt; &lt;/Card&gt; ); }; </pre> <p>Let’s check out the UI. First, we need to enter the following command to start the Next.js localhost environment:</p> <pre>npm run dev</pre> <p>By default, the Next.js localhost environment runs at <code>localhost:3000</code>. Here’s how our chatbot interface will appear in the browser:</p> <figure class="border-solid-1" data-lazy=""> <span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/ui-interface.jpg" alt="" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/ui-interface.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4>Setting up the API endpoint</h4> <p>Next, we need to set up the API endpoint that the UI will use when the user submits their query. To do this, we create a new file named <code>route.ts</code> in the <code>src/app/api/chat</code> directory. Below is the code that goes into the file.</p> <pre> import { readData } from '@/lib/data'; import { OpenAIEmbeddings } from '@langchain/openai'; import { OpenAIStream, StreamingTextResponse } from 'ai'; import { Document } from 'langchain/document'; import { MemoryVectorStore } from 'langchain/vectorstores/memory'; import OpenAI from 'openai'; /** * Create a vector store from a list of documents using OpenAI embedding. */ const createStore = () => { const data = readData(); return MemoryVectorStore.fromDocuments( data.map((title) => { return new Document({ pageContent: `Title: ${title}`, }); }), new OpenAIEmbeddings() ); }; const openai = new OpenAI(); export async function POST(req: Request) { const { messages } = (await req.json()) as { messages: { content: string; role: 'assistant' | 'user' }[]; }; const store = await createStore(); const results = await store.similaritySearch(messages[0].content, 100); const questions = messages .filter((m) => m.role === 'user') .map((m) => m.content); const latestQuestion = questions[questions.length - 1] || ''; const response = await openai.chat.completions.create({ messages: [ { content: `You're a helpful assistant. You're here to help me with my questions.`, role: 'assistant', }, { content: ` Please answer the following question using the provided context. If the context is not provided, please simply say that you're not able to answer the question. Question: ${latestQuestion} Context: ${results.map((r) => r.pageContent).join('\n')} `, role: 'user', }, ], model: 'gpt-4', stream: true, temperature: 0, }); const stream = OpenAIStream(response); return new StreamingTextResponse(stream); } </pre> <p>Let’s break down some important parts of the code to understand what’s happening, as this code is crucial for making our chatbot work.</p> <p>First, the following code enables the endpoint to receive a POST request. It takes the <code>messages</code> argument, which is automatically constructed by the <code>ai</code> package running on the front-end.</p> <pre> export async function POST(req: Request) { const { messages } = (await req.json()) as { messages: { content: string; role: 'assistant' | 'user' }[]; }; } </pre> <p>In this section of the code, we process the JSON file, and store them in a vector store.</p> <pre> const createStore = () => { const data = readData(); return MemoryVectorStore.fromDocuments( data.map((title) => { return new Document({ pageContent: `Title: ${title}`, }); }), new OpenAIEmbeddings() ); }; </pre> <p>For the sake of simplicity in this tutorial, we store the vector in memory. Ideally, you would need to store it in a Vector database. There are several options to choose from, such as:</p> <ul> <li><a rel="noopener" target="_blank" href="https://cassandra.apache.org/_/index.html">Apache Cassandra</a></li> <li><a rel="noopener" target="_blank" href="https://www.elastic.co/elasticsearch">ElasticSearch</a></li> <li><a rel="noopener" target="_blank" href="https://www.mongodb.com/atlas/database">MongoDB Atlas</a></li> <li><a rel="noopener" target="_blank" href="https://opensearch.org">OpenSearch</a></li> <li><a rel="noopener" target="_blank" href="https://redis.io">Redis</a></li> </ul> <p>Then we retrieve of the relevant piece from the document based on the user query from it.</p> <pre> const store = await createStore(); const results = await store.similaritySearch(messages[0].content, 100); </pre> <p>Finally, we send the user’s query and the related documents to the OpenAI API to get a response, and then return the response to the user. In this tutorial, we use the GPT-4 model, which is currently the latest and most powerful model in OpenAI.</p> <pre> const latestQuestion = questions[questions.length - 1] || ''; const response = await openai.chat.completions.create({ messages: [ { content: `You're a helpful assistant. You're here to help me with my questions.`, role: 'assistant', }, { content: ` Please answer the following question using the provided context. If the context is not provided, please simply say that you're not able to answer the question. Question: ${latestQuestion} Context: ${results.map((r) => r.pageContent).join('\n')} `, role: 'user', }, ], model: 'gpt-4', stream: true, temperature: 0, }); </pre> <p>We use a simple very prompt. We first tell OpenAI to evaluate the user’s query and respond to user with the provided context. We also set the latest model available in OpenAI, <code>gpt-4</code> and set the <code>temperature</code> to <code>0</code>. Our goal is to ensure that the AI only responds within the scope of the context, instead of being creative which can often lead to <strong><a rel="noopener" target="_blank" href="https://cloud.google.com/discover/what-are-ai-hallucinations">hallucination</a></strong>.</p> <p id="demo">And that’s it. Now, we can try to chat with the chatbot; our virtual personal assistant.</p> <p><video playsinline muted src="https://assets.hongkiat.com/uploads/create-chatbot-with-openai/ai-demo.mov" autoplay loop controls style="width: 100%; height: auto;"> </video></p> <h4>Wrapping Up</h4> <p>We’ve just built a simple chatbot! There’s Coding Artificial Intelligence Thoriq Firdaus Best Font Pairing Tools for Designers (2024) https://www.hongkiat.com/blog/font-pairing-tools/ hongkiat.com urn:uuid:619bacc2-02f3-ff33-2564-dc2ce3b97a7c Tue, 23 Apr 2024 13:00:32 +0000 <p>Pairing fonts is an essential process of any web design. If you want to create a good website design, you need to be able to make decisions such as choosing the right font, color scheme, even the right WordPress theme. For those seeking fonts, web typography tools are their go-to source. But for regular laypersons&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/font-pairing-tools/">Best Font Pairing Tools for Designers (2024)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p><strong>Pairing fonts is an essential process of any web design</strong>. If you want to create a good website design, you need to be able to make decisions such as <a href="https://www.hongkiat.com/blog/titles-headlines-fonts/">choosing the right font</a>, <a href="https://www.hongkiat.com/blog/website-color-scheme/">color scheme</a>, even <a href="https://www.hongkiat.com/blog/choosing-right-wordpress-theme/">the right WordPress theme</a>. For those seeking fonts, <a href="https://www.hongkiat.com/blog/web-typography-tools/">web typography tools</a> are their go-to source. But for regular laypersons like us, maybe there is another easier way to attempt this seemingly impossible task.</p> <p>Of course, there are a variety of font combinations readily available on the web which you can use. However, it’s also important to <strong>know how to create your own font pairs</strong>. There’s a whole science to applying heading, subheading and body copy to fit the type of content you produce and your brand identity.</p> <p>To help you with this process, here are <strong>13 of the best font-pairing websites which will help you to find your perfect font combination</strong>. These websites are extremely easy to use and wil help you make ideal typography decision in a few seconds. Let us know which ones you have used or if there are any you would like to suggest.</p> <div class="ref-block ref-block--post" id="ref-post-1"> <a href="https://www.hongkiat.com/blog/inspecting-font-family-with-google-chrome/" class="ref-block__link" title="Read More: How to Inspect Font Family with Google Chrome" rel="bookmark"><span class="screen-reader-text">How to Inspect Font Family with Google Chrome</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/inspecting-font-family-with-google-chrome.jpg" }'> <noscript> <style>.no-js #ref-block-post-18786 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/inspecting-font-family-with-google-chrome.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">How to Inspect Font Family with Google Chrome</h4> <p class="ref-description"> It's a rather common practice to use multiple fonts for a single page on a website. For example,... <span>Read more</span></p> </div> </div> <h4><a rel="nofollow noopener" target="_blank" href="https://www.monotype.com/font-pairing">Font Pairing Generator by Monotype</a></h4> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/monotype-font-pairing-tool.jpg?2" alt="monotype font pairing tool" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="monotype font pairing tool" width="1500" height="564" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/monotype-font-pairing-tool.jpg?2"><span class="img-ratio-placeholder__fill" style="padding-bottom:37%;max-width:1500px"></span></span></figure> <p>Monotype’s Font Pairing Tool is a user-friendly online resource designed to help users effortlessly find complementary font combinations. Whether you’re crafting a presentation, designing a website, or setting up marketing materials, this tool simplifies the process of selecting fonts that look good together. </p> <p>Users can explore a variety of font pairings provided by Monotype’s extensive library, which includes both classic and contemporary styles. The tool also offers expert recommendations to ensure that your text is not only aesthetically pleasing but also impactful and readable. Ideal for designers, marketers, and anyone involved in visual content creation, Monotype’s Font Pairing Tool makes typography easy and accessible for everyone. </p> <p><a href="https://www.monotype.com/font-pairing" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Font Pairing Generator </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://fontjoy.com/">FontJoy</a></h4> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/fontjoy.jpg?2" alt="fontjoy" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="fontjoy" width="1500" height="755" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/fontjoy.jpg?2"><span class="img-ratio-placeholder__fill" style="padding-bottom:50%;max-width:1500px"></span></span></figure> <p>By simply clicking the “Generate” button, FontJoy presents a combination of three fonts that harmonize well together, making your design aesthetically pleasing. Users can fine-tune their choices by adjusting a slider to blend similarity and contrast in the font selections.</p> <p>Additionally, there’s an option to lock in a preferred font and generate matching counterparts. Whether you’re designing a website, a poster, or any creative project, FontJoy’s tool simplifies the process of finding the perfect font pairings, saving you time and enhancing your designs with typography that pops.</p> <p><a href="https://fontjoy.com/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit FontJoy </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://femmebot.github.io/google-type/">Google Type</a></h4> <p>There are over 650 free typefaces available in Google Fonts. This creative project offers inspiration for using fonts from the Google Fonts library.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="https://femmebot.github.io/google-type/"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/2-font-pairing-tools.jpg?2" alt="google-type" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="google-type" width="800" height="428" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/2-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:53%;max-width:800px"></span></span></figure> <p><a href="https://femmebot.github.io/google-type/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Google Type </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://www.fontpair.co/">Font Pair</a></h4> <p><strong>Font Pair</strong> helps designers to combine Google Fonts. Just choose what kind of typeface pair you need between sans-serif, serif and cursive fonts. It also has a collection of font pairs in action.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="https://www.fontpair.co/"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/3-font-pairing-tools.jpg?2" alt="font-pair" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="font-pair" width="800" height="310" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/3-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:38%;max-width:800px"></span></span></figure> <p><a href="https://www.fontpair.co/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Font Pair </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://www.typewolf.com">Type Wolf</a></h4> <p><strong>Type Wolf</strong> is a collection of beautiful font combinations from around the web. There, you’ll find the most popular fonts, the site of the day and various font recommendations to find your ideal match.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="https://www.typewolf.com"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/5-font-pairing-tools.jpg?2" alt="typewolf" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="typewolf" width="1000" height="549" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/5-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:54%;max-width:1000px"></span></span></figure> <p><a href="https://www.typewolf.com" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Type Wolf </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="http://hellohappy.org/beautiful-web-type/">Beautiful Web Type</a></h4> <p>Google web font directory accounts for over 600 fonts. Of course, most of them are not really nice, but there are also high-quality typefaces which deserve a closer look. Here you can see these fonts in action. Just scroll down the site and see for yourself.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="http://hellohappy.org/beautiful-web-type/"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/6-font-pairing-tools.jpg?2" alt="beautiful-web-type" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="beautiful-web-type" width="1000" height="734" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/6-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:73%;max-width:1000px"></span></span></figure> <p><a href="http://hellohappy.org/beautiful-web-type/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Beautiful Web Type </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://fontsinuse.com">Fonts in Use</a></h4> <p><strong>Fonts in Use</strong> is a collection of different designs, such as websites, packaging, branding, business cards, posters, magazines along with a list of fonts which were used.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="https://fontsinuse.com"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/7-font-pairing-tools.jpg?2" alt="fontsinuse" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="fontsinuse" width="640" height="542" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/7-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:84%;max-width:640px"></span></span></figure> <p><a href="https://fontsinuse.com" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Fonts in Use </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://justmytype.co">Just My Type</a></h4> <p><strong>Just My Type</strong> is a showcase of font pairings from Typekit and H&FJ. These font samples are displayed in nice colorful blocks.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="https://justmytype.co"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/8-font-pairing-tools.jpg?2" alt="justmytype" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="justmytype" width="1000" height="700" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/8-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:70%;max-width:1000px"></span></span></figure> <p><a href="https://justmytype.co" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Just My Type </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://typ.io">Typ.io</a></h4> <p>All the fonts on <strong>Typ.io</strong> are tagged with related words and will help you to pair even complementary fonts together. It also features examples of different fonts used on websites, and you can see these combinations and pick the one you like.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="https://typ.io"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/9-font-pairing-tools.jpg?2" alt="typ-io" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="typ-io" width="1000" height="603" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/9-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:60%;max-width:1000px"></span></span></figure> <p><a href="https://typ.io" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Typ.io </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="http://font-combinator.com">Font Combinator</a></h4> <p><strong>Font Combinator</strong> is a tool similar to Blender. It will also help you pair titles and text copy fonts. Just choose the element, font, size and color.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="http://font-combinator.com"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/11-font-pairing-tools.jpg?2" alt="font-combinator" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="font-combinator" width="1000" height="437" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/11-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:43%;max-width:1000px"></span></span></figure> <p><a href="http://font-combinator.com" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Font Combinator </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4><a rel="nofollow noopener" target="_blank" href="https://www.typotheque.com/fonts/combinator/latin">Font Combinator by Typotheque</a></h4> <p><strong>Typotheque</strong> is both a graphic design studio and a type foundry publishing and distributing original Latin and non-Latin fonts. Their <strong>Font Combinator</strong> will help you to pair Latin, Greek, and Cyrillic fonts.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a rel="nofollow noopener" target="_blank" href="https://www.typotheque.com/fonts/combinator/latin"><noscript><IMG src="https://assets.hongkiat.com/uploads/font-pairing-tools/12-font-pairing-tools.jpg?2" alt="typotheque" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="typotheque" width="1000" height="527" data-lazy-src="https://assets.hongkiat.com/uploads/font-pairing-tools/12-font-pairing-tools.jpg?2"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:52%;max-width:1000px"></span></span></figure> <p><a href="https://www.typotheque.com/fonts/combinator/latin" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#6cadf4;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#fff"></i> Visit Typotheque </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></ UI/UX Font Tools Fonts Nancy Young Fresh Resources for Web Designers and Developers (April 2024) https://www.hongkiat.com/blog/designers-developers-monthly-04-2024/ hongkiat.com urn:uuid:24019387-3989-d483-51a8-5e056d8dcbe0 Mon, 22 Apr 2024 13:00:20 +0000 <p>It’s time for another edition of our collection of fresh tools and resources for our fellow designers and developers. This time around, we’ve got a little bit of everything, from demos showcasing the latest CSS features to some nifty JavaScript libraries you won’t want to miss. So, let’s jump right in and explore what’s new!&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/designers-developers-monthly-04-2024/">Fresh Resources for Web Designers and Developers (April 2024)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>It’s time for another edition of our collection of <a href="https://www.hongkiat.com/blog/tag/fresh-resources-developers/">fresh tools and resources</a> for our fellow designers and developers. </p> <p>This time around, we’ve got a little bit of everything, from demos showcasing the latest CSS features to some nifty <a href="https://www.hongkiat.com/blog/tag/javascript-libraries/">JavaScript libraries</a> you won’t want to miss. So, let’s jump right in and explore what’s new!</p> <h4><a rel="noopener" target="_blank" href="https://www.caniemail.com/">caniemail</a></h4> <p>Akin to <a rel="noopener" target="_blank" href="https://caniuse.com/">CanIUse</a>. <strong>CanIEmail</strong> provides a comprehensive reference for email client support of HTML and CSS features. It helps you understand which HTML and CSS features are supported across different email clients to create compatible and accessible email designs.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/caniemail.jpg" alt="CanIEmail feature compatibility chart" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="CanIEmail feature compatibility chart" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/caniemail.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://www.jsonviewer.tools/editor">JSON Viewer editor</a></h4> <p>This tool makes it easy for you to create, edit, validate, and preview JSON data. It offers features like syntax highlighting, formatting, error checking, and even a structure preview in a chart format. A handy solution for anyone needing to work with and preview JSON data efficiently.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/json-editor-viewer.jpg" alt="JSON Viewer Editor interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="JSON Viewer Editor interface" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/json-editor-viewer.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://anchor-tool.com/">Anchor Tool</a></h4> <p><a rel="noopener" target="_blank" href="https://www.w3.org/TR/css-anchor-position-1/">CSS Anchor Positioning</a>, featuring the new CSS <code>insert-area</code> property, is soon to arrive in the browsers. This site shows a hands-on demonstration of this new specification in action. You can see various anchor positions and how surrounding elements dynamically adjust.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/anchor-tool.jpg" alt="CSS Anchor Position demo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="CSS Anchor Position demo" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/anchor-tool.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://github.com/atlassian/pragmatic-drag-and-drop">Pragmatic Drag-n-Drop</a></h4> <p>Developed by Atlassian, <strong>Pragmatic Drag-n-Drop</strong> is a JavaScript library to make adding drag-and-drop functionality on the web easy. It provides a range of features such as custom drag handles, support for touch devices, and compatibility with modern web frameworks including React, Vue, and Angular.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/pragmatic-drag-n-drop.jpg" alt="Drag-n-Drop interface example" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Drag-n-Drop interface example" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/pragmatic-drag-n-drop.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://github.com/syntatis/wp-plugin-readme-parser">WordPress Plugin Readme Parser</a></h4> <p>It’s a handy Composer package that you can use this package to read the <strong>readme.txt</strong> or <strong>readme.md</strong> file in a WordPress plugin and gather information about the plugin, like the plugin name, required PHP version, tested WordPress version, and description. </p> <p>It’s based on <a rel="noopener" target="_blank" href="https://github.com/WordPress/wordpress.org/tree/trunk/wordpress.org">WordPress.org’s readme parser</a>, with some tweaks to ensure compatibility with more PHP versions.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/wp-plugin-readme-parser.jpg" alt="WordPress Plugin Readme Parser UI" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="WordPress Plugin Readme Parser UI" width="720" height="360" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/wp-plugin-readme-parser.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:50%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://phosphoricons.com/">PhosphorIcons</a></h4> <p><strong>PhosphorIcons</strong> offers a flexible icon set with 1000+ icons in six weights: <em>Thin</em>, <em>Light</em>, <em>Regular</em>, <em>Bold</em>, <em>Fill</em>, and <em>Duotone</em>. Designed to look sharp at any size, these icons are available for various platforms and frameworks including React, Vue, Flutter, and Elm.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/phosphoricons.jpg" alt="PhosphorIcons various weights display" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="PhosphorIcons various weights display" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/phosphoricons.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://cascade.stackonfire.com/">Cascade</a></h4> <p><strong>Cascade</strong> is a free open-source SaaS boilerplate, providing a minimal setup for starting your SaaS projects. It includes essential tech stack such as Next.js, Prisma, PostgreSQL, and TailwindCSS. It also includes authentication, payments, SEO enhancements, and analytics integration. </p> <p>With Cascade, you can quickly build SaaS applications efficiently.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/cascade.jpg" alt="Cascade SaaS boilerplate setup" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Cascade SaaS boilerplate setup" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/cascade.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://www.dark.design/">Dark Design</a></h4> <p>This site provides a curated collection of websites featuring <a href="https://www.hongkiat.com/blog/dark-color-websites/">dark-themed designs</a>. It showcases websites from various industries and categories, including Education, Commerce, and Agency.</p> <p>Whether you’re working on a website, app, or interface, this site could provide you with some inspiration.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/dark-design.jpg" alt="Collection of dark-themed designs" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Collection of dark-themed designs" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/dark-design.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener nofollow" target="_blank" href="https://playground.ai.cloudflare.com/">Cloudflare AI Playground</a></h4> <p><strong>Cloudflare AI Playground</strong> is a online Playground allows you to experiment with different LLM models like Mistral, Llama, OpenChat, and DeepSeek Coder. A handy tool if you plan to run your AI-based application on Cloudflare Workers AI, where you can run these models on its global network using serverless GPUs, bringing AI applications closer to your users.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/cloudflare-ai-playground.jpg" alt="Cloudflare AI Playground interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Cloudflare AI Playground interface" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/cloudflare-ai-playground.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://runjs.app/play">RunJS</a></h4> <p>RunJS is an online JavaScript playground where you can write and run code with instant live feedback. This makes it a convenient tool for quickly trying out ideas, testing algorithms, or debugging code.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/javascript-playground.jpg" alt="RunJS JavaScript playground interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="RunJS JavaScript playground interface" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/javascript-playground.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://github.com/valkey-io/valkey">Valkey</a></h4> <p>Valkey is a high-performance key/value data structure, aiming to resume development on the previously open-source Redis project. Similarly, it supports various native structures and an extendable plugin system.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/valkey.jpg" alt="Valkey data structure interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Valkey data structure interface" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/valkey.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://www.elmo.chat/">Elmo</a></h4> <p><strong>Elmo</strong> is a <a href="https://www.hongkiat.com/blog/tag/chrome-extensions/">Chrome extension</a> that can help you condense web content into concise summaries. It also provides instant answers to specific questions from the page, saving you time and effort. It seamlessly integrates into your browsing experience, making it ideal for research or learning without leaving your current webpage.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/elmo.jpg" alt="Elmo Chrome extension in action" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Elmo Chrome extension in action" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/elmo.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-banal">Banal</a></h4> <p>Banal provides an easy way to check the bundle size of NPM dependencies directly within VSCode. It allows you to identify and assess the impact of each dependency on the overall size of the project. This helps you make informed decisions about which dependencies to include or remove to optimize performance and resource usage.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/banal.jpg" alt="VSCode Banal extension usage" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="VSCode Banal extension usage" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/banal.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://eloquentjavascript.net/">Eloquent JavaScript</a></h4> <p><strong>Eloquent JavaScript</strong> is an online book that teaches you <a href="https://www.hongkiat.com/blog/study-javascript-what-to-know/">JavaScript programming</a> from the basics to advanced topics like functional programming and asynchronous programming. Whether you’re new or want to sharpen your skills, this book is a valuable resource for learning JavaScript.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/eloquent-javascript.jpg" alt="Eloquent JavaScript book cover" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Eloquent JavaScript book cover" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/eloquent-javascript.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://firebolt.dev/">Firebolt</a></h4> <p>Firebolt is a <a href="https://www.hongkiat.com/blog/react-js-web-developers-toolkit/">React framework</a> for building high-performance, full-stack web applications quickly. It provides a streamlined directory structure, first-class CSS-in-JS support, and an intuitive routing system for pages, assets, virtual files, APIs, and more.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/firebolt.jpg" alt="Firebolt React framework interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Firebolt React framework interface" width="720" height="413" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/firebolt.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:57%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://antonz.org/grep-by-example/">Grep by Example</a></h4> <p><strong>“Grep by example”</strong> is an interactive guide for learning the <code><a href="https://www.hongkiat.com/blog/linux-command-grep/">grep</a></code> CLI, the text search tool commonly found on Linux systems. It offers step-by-step tutorials and allows users to experiment with examples by modifying commands in real-time.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/grep-by-example.jpg" alt="Interactive Grep CLI tutorial interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Interactive Grep CLI tutorial interface" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/grep-by-example.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://a11ymyths.com/">A11y Myths</a></h4> <p><strong>A11yMyths</strong> is a website that aims to debunk common misconceptions about <a href="https://www.hongkiat.com/blog/web-accessibility-design-guide/">web accessibility</a>. It provides information and resources to help you build more inclusive and user-friendly experiences on the Web.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/a11ymyths.jpg" alt="A11y Myths debunking common misconceptions" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="A11y Myths debunking common misconceptions" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/a11ymyths.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://analogjs.org/">AnalogJS</a></h4> <p><strong>Analog</strong> is a meta-framework for building websites and apps with <a href="https://www.hongkiat.com/blog/angularjs-tutorials-screencast/">Angular</a>; it’s similar to Next.js or Nuxt, but made for Angular. Key features include support for Vite, Vitest, Playwright, file-based routing, integration of markdown for content routes, API/server route handling, and hybrid SSR/SSG capabilities.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/analog.jpg" alt="AnalogJS Angular meta-framework interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="AnalogJS Angular meta-framework interface" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/analog.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://github.com/swissspidy/wordpressers-on-github">WordPresser on Github</a></h4> <p>This Chrome extension will add WordPress.org profile links next to GitHub usernames. It helps you easily recognize WordPress users or contributors on Github and collaborate more efficiently. It is available on both Chrome and Firefox.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/wordpresser-on-github.jpg" alt="WordPresser GitHub Chrome extension" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="WordPresser GitHub Chrome extension" width="720" height="480" data-lazy-src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/wordpresser-on-github.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:720px"></span></span></figure> <h4><a rel="noopener" target="_blank" href="https://developer.wordpress.com/studio/">WordPress.com Studio</a></h4> <p><strong>WordPress.com Studio</strong> is a new desktop app for WordPress users, simplifying local development. It allows you to easily share the local work to collaborate with team members or clients, creating patterns and templates, and customize the site with just a few clicks.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/designers-developers-monthly-04-2024/wodpress-com-studio Web Design Tools for Designers & Developers Thoriq Firdaus How to Download Envato Elements Files for Free https://www.hongkiat.com/blog/download-envato-elements-free/ hongkiat.com urn:uuid:4f2a6027-2b8b-63e7-1bb6-76036cfb9110 Fri, 19 Apr 2024 10:00:19 +0000 <p>Envato Elements is a subscription-based platform offering a vast library of digital assets for various creative projects. This service includes graphic templates, fonts, photos, 3D content, and videos. It is particularly beneficial for designers, marketers, and other creative professionals, providing unlimited access to these resources for a set monthly or annual fee. Envato Elements is&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/download-envato-elements-free/">How to Download Envato Elements Files for Free</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p><a rel="nofollow noopener" target="_blank" href="https://hongkiat.com/blog/go/envato-elements">Envato Elements</a> is a subscription-based platform offering a vast library of digital assets for various creative projects. This service includes graphic templates, fonts, photos, 3D content, and videos. </p> <p>It is particularly beneficial for designers, marketers, and other creative professionals, providing unlimited access to these resources for a set monthly or annual fee. Envato Elements is renowned for its cost-effectiveness and extensive, continuously updated collection, making it an indispensable tool in the creative industry. </p> <p>In this post, I’ll explore several methods to legally download content from Envato Elements at no cost.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/download-envato-elements-free/envato-elements-homepage.jpg" alt="Envato Elements Homepage Display" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Envato Elements Homepage Display" width="2525" height="1621" data-lazy-src="https://assets.hongkiat.com/uploads/download-envato-elements-free/envato-elements-homepage.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:64%;max-width:2525px"></span></span></figure> <h5>Monthly Free Files</h5> <p>Envato Elements provides a selection of free files every month, including fonts, videos, graphics, templates, and more. Visit <a rel="nofollow noopener" target="_blank" href="https://1.envato.market/c/2257137/298927/4662?u=https%3A%2F%2Felements.envato.com%2Ffree-files">this page</a> to discover what is available for free each month. </p> <p>To download these files, you will need to create a free Envato Elements account.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/download-envato-elements-free/envato-elements-free-of-the-month.jpg" alt="Envato Free Monthly Files Preview" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Envato Free Monthly Files Preview" width="2507" height="2091" data-lazy-src="https://assets.hongkiat.com/uploads/download-envato-elements-free/envato-elements-free-of-the-month.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:83%;max-width:2507px"></span></span></figure> <h5>Free Trials</h5> <p><a rel="nofollow noopener" target="_blank" href="https://hongkiat.com/blog/go/envato-elements">Envato Elements</a> offers a 7-day free trial, during which you can download unlimited files. To start the trial, you must create an account and provide your credit card details. Rest assured, you will not be charged if you cancel the trial before the seven days expire.</p> <h5>Discounts for Students</h5> <p>If you’re a student, you can enjoy a 30% discount on an Envato Elements subscription. While it’s not free, it is significantly cheaper. To qualify for the student discount, you will need to verify your student status with Envato.</p> <h5>Giveaways</h5> <p>Envato Elements occasionally hosts giveaways on social media and other platforms. To participate, follow Envato Elements and meet the entry requirements specified in the giveaway.</p> <h4>Alternative Free Resources</h4> <p>Beyond these options, there are additional sites where you can find free files similar to those offered on Envato Elements. For instance, to download <strong>free high-quality images</strong>, consider exploring these sites:</p> <ul> <li><a rel="noopener" target="_blank" href="https://unsplash.com/">Unsplash</a></li> <li><a rel="noopener" target="_blank" href="https://burst.shopify.com/">Burst</a></li> <li><a rel="noopener nofollow" target="_blank" href="https://www.pexels.com/">Pexels</a></li> <li><a rel="noopener nofollow" target="_blank" href="https://pixabay.com//">Pixabay</a></li> </ul> <p>For additional resources, view our post on <a href="https://www.hongkiat.com/blog/more-free-stock-photos-royalty-images/">Best Sites to Download High Quality Royalty-Free Images</a> for more details.</p> <p>To download <strong>free stock videos</strong>, visit the following sites:</p> <ul> <li><a rel="noopener" target="_blank" href="https://www.freepik.com/videos">Freepik</a></li> <li><a rel="noopener nofollow" target="_blank" href="https://pixabay.com//en/videos/list/">Pixabay</a></li> <li><a rel="noopener" target="_blank" href="https://wave.video/assets/stock/free-videos">Wave.video</a></li> </ul> <p>For more options, check out our post on <a href="https://www.hongkiat.com/blog/free-high-quality-stock-videos/">Sites to Download Free High Quality Stock Videos</a>.</p> <p>We have also published comprehensive lists of sites where you can <a href="https://www.hongkiat.com/blog/download-free-vector-websites/">download free vectors</a>, <a href="https://www.hongkiat.com/blog/download-free-illustration-websites/">download free illustrations</a>, and <a href="https://www.hongkiat.com/blog/download-svg-icons/">download free SVG icons</a>. I recommend checking these out as well.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/download-envato-elements-free/">How to Download Envato Elements Files for Free</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> Toolkit Hongkiat.com Apple Car Key Supported Cars https://www.hongkiat.com/blog/apple-car-key-cars/ hongkiat.com urn:uuid:01130e43-2997-5d2b-1c86-09add23d7d99 Thu, 18 Apr 2024 15:00:28 +0000 <p>Apple introduced the Car Key feature at the WWDC 2020, which lets users unlock and start their cars using the Wallet app on their iPhone or Apple Watch. Here’s a complete list of cars that are compatible with Apple’s Car Key integration. But first, let’s take a quick look at what Apple Car Key is,&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/apple-car-key-cars/">Apple Car Key Supported Cars</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Apple introduced the Car Key feature at the <a rel="nofollow noopener" target="_blank" href="https://www.theverge.com/2020/6/22/21299182/apple-carkey-ios-14-13-digital-key-unlock-car-iphone-wwdc-2020">WWDC 2020</a>, which lets users unlock and start their cars using the Wallet app on their iPhone or Apple Watch. Here’s a <a href="#list">complete list</a> of cars that are compatible with Apple’s Car Key integration.</p> <p>But first, let’s take a quick look at <a href="apple_car_key" rel="nofollow">what Apple Car Key is</a>, and <a href="howto_add" rel="nofollow">how to get it added to your iPhone</a>.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/apple-car-key-cars/apple-car-key.jpg" alt="Apple Car Key demonstration" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Apple Car Key demonstration" width="1600" height="900" data-lazy-src="https://assets.hongkiat.com/uploads/apple-car-key-cars/apple-car-key.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1600px"></span></span></figure> <h4 id="apple_car_key">What is Apple Car Key?</h4> <p>Apple Car Key is a feature distinct from Apple CarPlay. It is integrated within the Wallet app on your iPhone or Apple Watch, allowing you to add your car keys digitally. Once added, you can lock, unlock, and start your car by simply raising your device near the vehicle’s handle.</p> <p>You can also share your car keys with friends or family via Messages, Mail, or AirDrop, enhancing convenience. Additionally, Car Key supports Express Mode, which lets you use your car key without needing to unlock your device or authenticate with Face ID, Touch ID, or a passcode.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/apple-car-key-cars/apple-car-key-share.jpg" alt="Sharing Apple Car Key" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Sharing Apple Car Key" width="2546" height="1426" data-lazy-src="https://assets.hongkiat.com/uploads/apple-car-key-cars/apple-car-key-share.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:2546px"></span></span></figure> <h4 id="howto_add">How to Add Apple Car Key to iPhone</h4> <p>To use your iPhone or Apple Watch as your car key, you need to ensure compatibility with your vehicle. Check with your car manufacturer or dealership to see if your vehicle supports this feature. </p> <p>You will need an iPhone XS or later, or an iPhone SE (2nd generation), running the latest version of iOS; or an Apple Watch Series 5 or later, or an Apple Watch SE, with the latest version of watchOS. Make sure you are signed into your device with your Apple ID.</p> <p>Here’s how to set it up:</p> <ol class="steps"> <li>Ensure that your car is associated with the account provided by the car’s manufacturer.</li> <li>Set up your key using the car manufacturer’s app or via your car’s display screen. Follow the instructions to set up your key.</li> <li>When you are sent to the Wallet app, tap ‘Continue’.</li> <figure class="screenshot-mobile-portrait" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/apple-car-key-cars/car-keys-in-wallet.jpg" alt="Car keys added in Apple Wallet" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Car keys added in Apple Wallet" width="640" height="1294" data-lazy-src="https://assets.hongkiat.com/uploads/apple-car-key-cars/car-keys-in-wallet.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:202%;max-width:640px"></span></span></figure> <li>When prompted with on-screen instructions, place your phone near the key reader while your phone and car pair.</li> </ol> <p>Please note that when you pair your car key with your iPhone, it might also be automatically paired with your Apple Watch.</p> <h4 id="list">Car Models Supporting Apple Car Key</h4> <div class="su-table su-table-alternate"> <table> <tr> <th>Brand</th> <th>Model Years and Types</th> </tr> <tr> <td rowspan="20">BMW</td> <td>2021 – 2023 1 Series</td> </tr> <tr> <td>2021 – 2023 2 Series</td> </tr> <tr> <td>2021 – 2023 3 Series</td> </tr> <tr> <td>2021 – 2023 4 Series</td> </tr> <tr> <td>2021 – 2023 5 Series</td> </tr> <tr> <td>2021 – 2023 6 Series</td> </tr> <tr> <td>2021 – 2023 8 Series</td> </tr> <tr> <td>2021 – 2023 X5</td> </tr> <tr> <td>2021 – 2023 X6</td> </tr> <tr> <td>2021 – 2023 X7</td> </tr> <tr> <td>2021 – 2023 X5 M</td> </tr> <tr> <td>2021 – 2023 X6 M</td> </tr> <tr> <td>2021 – 2023 Z4</td> </tr> <tr> <td>2022 – 2023 i4</td> </tr> <tr> <td>2022 – 2023 iX</td> </tr> <tr> <td>2022 – 2023 iX1</td> </tr> <tr> <td>2022 – 2023 iX3</td> </tr> <tr> <td>2023 i3</td> </tr> <tr> <td>2023 i7</td> </tr> <tr> <td>2024 i5</td> </tr> <tr> <td>BYD</td> <td>2022 – 2023 HAN</td> </tr> <tr> <td rowspan="2">Genesis</td> <td>2023 GV60</td> </tr> <tr> <td>2023 G90</td> </tr> <tr> <td rowspan="3">Hyundai</td> <td>2023 Palisade</td> </tr> <tr> <td>2023 IONIQ 6</td> </tr> <tr> <td>2024 Kona EV</td> </tr> <tr> <td rowspan="4">Kia</td> <td>2023 Telluride</td> </tr> <tr> <td>2023 Niro</td> </tr> <tr> <td>2024 Seltos</td> </tr> <tr> <td>2024 EV9</td> </tr> <tr> <td>Lotus</td> <td>Emeya EV</td> </tr> <tr> <td>Mercedes-Benz</td> <td>2024 E-Class</td> </tr> </table> </div> <h4>Is There an Official List?</h4> <p>There isn’t an official list of car models that support Apple Car Key by Apple yet, but here’s one that’s closest if you want to keep yourself updated. This is a list of <a href="https://www.apple.com/ios/carplay/available-models/">cars that support CarPlay</a> by Apple, and alongside each of the models that support Apple Car Key, a key icon is added.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/apple-car-key-cars/car-key-icon.jpg" alt="Key icon next to CarPlay models" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Key icon next to CarPlay models" width="1060" height="682" data-lazy-src="https://assets.hongkiat.com/uploads/apple-car-key-cars/car-key-icon.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:64%;max-width:1060px"></span></span></figure> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/apple-car-key-cars/">Apple Car Key Supported Cars</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> Gadgets Apple Hongkiat.com Workplace Communication: Why It Is More Important Than Ever https://www.hongkiat.com/blog/workplace-communication/ hongkiat.com urn:uuid:22fd826b-e0a4-bf16-d304-c752155c59ad Thu, 18 Apr 2024 10:00:14 +0000 <p>Workplace communication is a living term with dynamic nuances. At its worst, the absence of effective communication can lead to negative consequences such as absenteeism, employee turnover, increased conflicts, low morale, and compromised productivity. According to David Grossman’s findings in ‘The Cost of Poor Communication,’ inadequate information in an organization results in an average loss&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/workplace-communication/">Workplace Communication: Why It Is More Important Than Ever</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Workplace communication is a living term with dynamic nuances.</p> <p>At its worst, the absence of effective communication can lead to negative consequences such as absenteeism, employee turnover, increased conflicts, low morale, and compromised productivity.</p> <div class="ref-block ref-block--post" id="ref-post-1"> <a href="https://www.hongkiat.com/blog/positive-working-environment/" class="ref-block__link" title="Read More: 5 Characteristics of A Positive Work Environment" rel="bookmark"><span class="screen-reader-text">5 Characteristics of A Positive Work Environment</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/positive-working-environment.jpg" }'> <noscript> <style>.no-js #ref-block-post-16190 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/positive-working-environment.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">5 Characteristics of A Positive Work Environment</h4> <p class="ref-description"> Aside from the job scope itself, one factor that significantly influences how employees feel about work is the... <span>Read more</span></p> </div> </div> <p>According to David Grossman’s findings in ‘<a rel="nofollow noopener" target="_blank" href="https://courses.lumenlearning.com/suny-esc-communicationforprofessionals/chapter/the-cost-of-poor-communication/">The Cost of Poor Communication</a>,’ inadequate information in an organization results in an average loss of $62.4 million per year.</p> <p>That’s absurd.</p> <p><em>And yet, often, we simply allow poor communication to take the wheel.</em></p> <p>If you are letting it happen, it’s high time you reconsider your communication strategy, no matter the scale and sector in which you operate.</p> <p>So, without further ado, let’s find out why you should invest more heavily in workplace communication and how you can achieve it.</p> <h4><strong>What Is Workplace Communication?</strong></h4> <p>Workplace communication is the foundation of a strong work culture. Whether remote or hybrid, effective workplace communication serves as an insightful manual for how your teams <a rel="nofollow noopener" target="_blank" href="https://www.proofhub.com/articles/team-chat-apps">interact with each other</a>.</p> <p>Whether synchronous or asynchronous, these concepts refer to the exchange of information, such as providing and receiving feedback, sharing project information, statuses, and updates, or presenting ideas. Defining your company goals, <a href="https://www.hongkiat.com/blog/teamwork-mobile-apps/">fostering teamwork</a>, and coordinating various aspects of work are influential factors that drive effective workplace communication.</p> <p>Some examples of workplace communication include:</p> <ul> <li>1:1 sessions</li> <li>Quick dial-ins</li> <li>Quick messages</li> <li>Team or group meetings</li> <li>Project or task updates</li> <li>Formal presentations</li> <li>Written documents</li> <li>Informative emails</li> <li>Video conferences</li> <li>Non-verbal communication</li> </ul> <h4><strong>Why Do You Need to Focus on Improving Workplace Communication?</strong></h4> <p><em>Effective workplace communication is the backbone of a successful organization.</em></p> <p>It ensures smooth operations and synergy among team members, preventing misunderstandings and confusion from evolving into chaotic quagmires.</p> <p>As a leader, you should not allow these disruptions to waste employees’ potential and efforts.</p> <p>Investing time in refining your communication strategy yields both short-term and long-term benefits, empowering individuals and teams, and benefiting the organization as a whole.</p> <p>Let’s explore other ways effective communication can elevate a company’s success standards.</p> <h5>Increases Productivity</h5> <p>According to Harris Poll’s <a rel="nofollow noopener" target="_blank" href="https://www.grammarly.com/business/learn/state-of-business-communications-2023/">The State of Business Communication</a> in 2023, effective communication is trusted by 72% of business leaders to increase productivity, with 50% of workers agreeing. Improved communication strategies make employees feel empowered, understand their roles, fulfill duties efficiently, and seek collaboration opportunities, leading to smoother operations and faster achievement of results.</p> <h5>Enhanced Engagement</h5> <p>Effective communication fosters an environment where employees feel valued, heard, and respected, increasing trust in management and commitment to the organization. Transparent and regular communication across teams builds cohesion, motivating employees towards achieving company goals.</p> <h5>Reduces Conflict</h5> <p>Lack of communication or clashes of diverse perspectives, cultures, and beliefs can lead to conflicts, misinterpretation, and miscommunication, adversely impacting employee relationships and organizational environment. Refining communication styles prevents the workplace from becoming toxic and ensures information is conveyed and understood accurately.</p> <h5>Improves Retention</h5> <p>According to the <a rel="nofollow noopener" target="_blank" href="https://info.workinstitute.com/retentionreport2017">Work Institute’s Retention report</a>, the average replacement cost for an employee earning a median salary of $50,000 a year is $16,500. Promoting effective workplace communication is cost-effective as it enhances employee retention, reducing the need for frequent recruiting and training.</p> <h5>Better Collaboration</h5> <p>Effective communication is the basis for collaboration. When everyone is aware of each other’s needs, preferences, strengths, and weaknesses, it fosters a supportive environment. Tools like <a rel="nofollow noopener" target="_blank" href="https://www.proofhub.com/">ProofHub</a> enhance collaboration by providing a centralized platform for team communication, project management, file sharing, and task tracking, ensuring seamless teamwork and unified project progression.</p> <h4>5 Key Tips to Improve Workplace Communication</h4> <p>Now that you have a complete understanding of effective workplace communication and its importance, let’s move forward and examine practical tips to enhance communication within your organization.</p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/workplace-communication/improve-workplace-communication.jpg" alt="Improve workplace communication" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Improve workplace communication" width="1000" height="667" data-lazy-src="https://assets.hongkiat.com/uploads/workplace-communication/improve-workplace-communication.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1000px"></span></span></figure> <h5>1. Know What to Say and to Whom</h5> <p>Communication is an art that requires understanding of different communication styles. Being aware of your audience allows you to select your words carefully to be considerate. Consider the medium of communication that best suits the message and the audience, whether it be face-to-face interaction, email, or messaging. Establish clear communication guidelines to ensure messages align with the intended context and content, fostering a close-knit community.</p> <h5>2. Practice Two-Way Communication</h5> <p>Effective communication is bidirectional. It involves listening as much as talking. Keep an open perspective, understand the contributions of others, and provide a space for everyone to be heard without prejudice. Ensure that you reach out to acknowledge and consider every unique perspective, as not everyone will proactively share their thoughts.</p> <h5>3. Be Mindful of Your Non-Communicative Gestures</h5> <p>Non-verbal cues, such as facial expressions, body language, and voice tone, can unintentionally convey messages. Be mindful of these non-communicative gestures during conversations to avoid misunderstandings and project approachability, sincerity, and empathy, especially during challenging discussions.</p> <h5>4. Create a Collaborative Environment</h5> <p>Assess the quality of engagement within your team to ensure it’s genuine and not just superficial politeness. A healthy communicative environment prioritizes psychological safety, encouraging open exchange of ideas, feedback, and thoughts without fear of judgment. Modern workplaces benefit from enterprise communication solutions for internal collaboration, promoting an open dialogue exchange beyond traditional ideations.</p> <h5>5. Use Technological Applications</h5> <p>The adoption of remote and hybrid work setups globally has presented challenges in managing effective communication, especially in a distributed workforce. Utilizing technological tools like <a rel="nofollow noopener" target="_blank" href="https://www.chanty.com/">Chanty</a> or <a rel="nofollow noopener" target="_blank" href="https://slack.com/intl/en-in/">Slack</a> can streamline communication, serving as efficient alternatives for face-to-face interactions and ensuring everyone is aligned and informed.</p> <h4>Takeaway</h4> <p>Workplace communication has significantly evolved over the years, yet predicting its definitive future remains challenging. Remaining in the comfort zone is not conducive to progress.</p> <p>Despite uncertainties, improving workplace communication is crucial to ongoing success, as its significance has grown beyond simply exchanging information.</p> <p>In conclusion, continually enhancing your communication skills is essential to transforming your organization into a productivity powerhouse.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/workplace-communication/">Workplace Communication: Why It Is More Important Than Ever</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> Office workplace Vartika Kashyap How to effectively A/B test power consumption for your Android app’s features http://android-developers.googleblog.com/2024/04/how-to-effectively-ab-test-power-consumption-for-your-android-app-features.html Android Developers Blog urn:uuid:555406e7-e855-b312-03dc-67902d317ab4 Wed, 17 Apr 2024 16:18:56 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA0vd4Jjzz-DSu2_AQwcnJyoHCeT15o9fq6G8bddSCbYk_F6wzz6uuW_5BsiZdondCWVXK9kDlLkKoPeLAtwEcsBGHn67_oIuEgyW28u4OsdzHISmcvKAsrmcGzoRZl-hOD5T1SVvzrGdF1OGeXqK6-GbkqU0zV9etBfyTYDIrQW4fVFgwrrhT4xDy3mQ/s1600/Power-Profiler-Pro-Social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA0vd4Jjzz-DSu2_AQwcnJyoHCeT15o9fq6G8bddSCbYk_F6wzz6uuW_5BsiZdondCWVXK9kDlLkKoPeLAtwEcsBGHn67_oIuEgyW28u4OsdzHISmcvKAsrmcGzoRZl-hOD5T1SVvzrGdF1OGeXqK6-GbkqU0zV9etBfyTYDIrQW4fVFgwrrhT4xDy3mQ/s1600/Power-Profiler-Pro-Social.png" style="display: none;" /> <em>Posted by Mayank Jain - Product Manager, and Yasser Dbeis - Software Engineer; Android Studio </em> <div><br /></div> <p>Android developers have been telling us they're looking for tools to help optimize power consumption for different devices on Android.</p> <p>The new <a href="https://developer.android.com/studio/profile/power-profiler" target="_blank">Power Profiler</a> in Android Studio helps Android developers by showing power consumption happening on devices as the app is being used. Understanding power consumption across Android devices can help Android developers identify and fix power consumption issues in their apps. They can run A/B tests to compare the power consumption of different algorithms, features or even different versions of their app.</p> <image><div style="text-align: center;"><img alt="The new Power Profiler in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho7zC3SQM_nmra_12UstVke6CJRGM6_OshsgmQFKpRQTTOeWDni2MVLUWy7tK_gH3jrvG-dUAEbJcjQVw9OdRdroy4k0VFXtfwGmtZ9qi3RAHhNYCo4B53uid9I8p1rzrrvcr585u1bL9HYvNrrWz-D1domukWvAC40agJVsM8b7N5LIEGNNuEQiJOsOs/s1600/image1.png" width="100%" /></div><imgcaption><center><em>The new Power Profiler in Android Studio</em></center></imgcaption></image> <p>Apps which are optimized for lower power consumption lead to an improved battery and thermal performance of the device, which means an improved user experience on Android.</p> <p>This power consumption data is made available through the On Device Power Monitor (ODPM) on Pixel 6+ devices, segmented by each sub-system called “Power Rails”. See <a href="https://developer.android.com/studio/profile/power-profiler#power-rails" target="_blank">Profileable power rails</a> for a list of supported sub-systems.</p> <blockquote><p>The Power Profiler can help app developers detect problems in several areas:</p> <ul><ul> <li>Detecting unoptimized code that is using more power than necessary.</li> <li>Finding background tasks that are causing unnecessary CPU usage.</li> <li>Identifying wakelocks that are keeping the device awake when they are not needed.</li> </ul></ul></blockquote> <p>Once a power consumption issue has been identified, the Power Profiler can be used when testing different hypotheses to understand why the app could be consuming excessive power. For example, if the issue is caused by background tasks, the developer can try to stop the tasks from running unnecessarily or for longer periods. And if the issue is caused by wakelocks, the developer can try to release the wakelocks when the resource is not in use or use them more judiciously. Then compare the power consumption before/after the change using the Power Profiler.</p> <p>In this blog post, we showcase a technique which uses A/B testing to understand how your app’s power consumption characteristics might change with different versions of the same feature - and how you can effectively measure them.</p> <h3>A real-life example of how the Power Profiler can be used to improve the battery life of an app.</h3> <p>Let’s assume you have an app through which users can purchase their favorite movies.</p> <image><div style="text-align: center;"><img alt="Sample app to demonstrate A/B testing for measure power consumption" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKuZEGcP6XVxijlnx2EAp8fe0dz5L5i3ZIfQtrXW0wzZVmOU7_59d3i0yVLu0SKMWlQZql0YY9Ea9mrU2YkThhYnuhodLuSq_k4vknszPy-Lv2JXNsvRqmMTHK5uMW2HlflrMn78IebefvmG9ASrvMW46xBYMY8oqIQy1qGXx2nTdjwuphYKi7Aw-InE/s1600/image4.png" width="45%" /></div><imgcaption><center><em>Sample app to demonstrate A/B testing for measure power consumption&nbsp;</em></center><center><em><span style="font-size: x-small;">Video (c) copyright Blender Foundation | www.bigbuckbunny.org</span></em></center></imgcaption></image><br /> <p>As your app becomes popular and is used by more users, you realize that a high quality 4K video takes very long to load every time the app is started. Because of its large size, you want to understand its impact on power consumption on the device.</p> <p>Originally, this video was in 4K quality in the best of intentions, so as to showcase the best possible movie highlights to your customers.</p> <p>This makes you think…</p> <ul><ul> <li>Do you really need a 4K video banner on the home screen? </li> <li>Does it make sense to load a 4K video over the network every time your app is run?</li> <li>How will the power consumption characteristics of your app change if you replace the 4K video with something of lower quality (while still preserving the vivid look &amp; feel of the video)?</li> </ul></ul> <h3>This is a perfect scenario to perform an A/B test for power consumption</h3> <p>With an A/B test, you can test two slightly different variations of the video banner feature and choose the one with the better power consumption characteristics.</p> <p><b>Scenario A :</b> Run the app with 4K video banner on screen &amp; measure power consumption</p> <p><b>Scenario B :</b> Run the app with lower resolution video banner on screen &amp; measure power consumption</p> <h4 style="text-align: left;"><span style="font-size: large;">A/B Test setup</span></h4> <p>Let's take a moment and set up our Android Studio profiler to run this A/B test. We need to start the app and attach the CPU profiler to it and trigger a system trace (where the Power Profiler will be shown).</p> <p><b>Step 1</b></p> <p>Create a custom “Run configuration” by clicking the 3 dot menu &gt; Edit</p> <image><div style="text-align: center;"><img alt="Custom run configuration" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTgKDs_bMvAvkdyUPPzvGb7vSbEYPzA46qouzJAyF9QlUq7m5wFmJhIpj3k9uhaaDZ5pSeCxUOqb-RfbiFG50v8614z6Q9GS9OGnhW6d8RSuBYHQf4hnOftGzrssRMnLXPfWEsiP-gPQrLH0MBDCwfDfyNgSME1zYV-cUdn60qQ7mcbdag7kQIMIt0klc/s1600/image8.png" width="100%" /></div><imgcaption><center><em>Custom run configuration</em></center></imgcaption></image> <p><b>Step 2</b></p> <p>Then select the “Profiling” tab and ensure that “Start this recording on startup” and CPU Activity &gt; System Trace is selected. Then click “Apply”.</p> <image><div style="text-align: center;"><img alt="Edit configuration settings" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTpoe9Wq-VtcCI6kPxTZfDtlu_qJ-mXl8dvlgXeVIRfjS4iQSbAN1gKtP7L_p1EZK9CGHCQF7f9F9cLU6sgnnICf_Gu4eCHbLaIIF0Cg12pCB0VBStByhvQkaiDhdPOKPQjbtB5JEFMKWtuP68K9oGKrcIx-5vXR1GqPpqA4vc4IxOMMckOeaOPKg3_4s/s1600/image6.png" width="100%" /></div><imgcaption><center><em>Edit configuration settings</em></center></imgcaption></image><br /> <p>Now simply run the “Profile app startup profiling with low overhead” whenever you want to run this app from start and attach the CPU profiler to it.</p> <h3>Note on precision</h3> <p>The following example scenarios use the entire app startup for estimating the power consumption for this blog’s purpose. However you can use more advanced techniques to have even higher precision in getting power readings. Some techniques to try are:</p> <ul><ul> <li>Isolate and measure power consumption for video playback only after a tap event on the video player</li> <li>Use the <a href="https://developer.android.com/reference/android/os/Trace" target="_blank">trace markers API</a> to mark the start and stop time for power measurement timeline - and then only measure power consumption within that marked window</li> </ul></ul> <h4 style="text-align: left;"><span style="font-size: large;">Scenario A </span></h4> <p>In this scenario, we run the app with 4K video playing and measure power consumption for the first 30 seconds. We can optionally also run the scenario A multiple times and average out the readings. Once the System trace is shown in Android Studio, select the 0-30 second time range from the timeline selection panel and record as a screenshot for comparing against scenario B</p> <image><div style="text-align: center;"><img alt="Power consumption in scenario A - playing a 4k video" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmfA89nfK7p-pWlznyxhosGNG8s5AUJlJRbFzWYk4WG-7pJIcv4L9sRkziWAHp3u8K8dxnNBQKKNZOkAe24qkdnFjfFuHF4Hb77V3uNCU7dVndRBypGfgRbybGrFGvc63egMGkE29H3boiwLrcZa5Ka21mANV_4qOYMFKD9QwdbDnZ3iazsQw1aAHZun0/s1600/image2.png" width="100%" /></div><imgcaption><center><em>Power consumption in scenario A - playing a 4k video</em></center></imgcaption></image><br /> <p>As you can see, the average power consumed by WLAN, CPU cores &amp; Memory combined is about 1,352 mW (milliwatts)</p> <p>Now let's compare and contrast how this power consumption changes in Scenario B</p> <h4 style="text-align: left;"><span style="font-size: large;">Scenario B </span></h4> <p>In this scenario, we run the app with low quality video playing and measure power consumption for the first 30 seconds. As before, we can also optionally run scenario B multiple times and average out the power consumption readings. Again, once the System trace is shown in Android Studio, select the 0-30 second time range from the timeline selection panel.</p> <image><div style="text-align: center;"><img alt="Power consumption in scenario B - playing a lower quality video" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCygqf2MCa0rrN4il8ABCqxkmjMLBlqEg8hnpm9aDtnpRHii7n1gvSbyNpwzw5LIrLE-U2ob6jnZouZvKyNnqTZd95EY3n3JMmGC8f8gEzgHUeTCqJXbyDVTGkf4pRFITjrcggwxpViTrWTqBPvP5oH1aB6vsb-Nkfu0obGhRCwQJuU2uCCUKiSu9RGpQ/s1600/image5.png" width="100%" /></div><imgcaption><center><em>Power consumption in scenario B - playing a lower quality video</em></center></imgcaption></image> <p>The total power consumed by WLAN, CPU Little, CPU Big and CPU Mid &amp; Memory is about 741 mW (milliwatts)</p> <h3>Conclusion</h3> <p>All else being equal, Scenario B (with lower quality video) consumed 741 mW power as compared to Scenario A (with 4K video) which required 1,352 mW power.</p> <p>Scenario B (lower quality video) took 45% less power than Scenario A (4K) - while the lower quality video provides little to no visual difference in perceived quality of the app’s screen.</p> <p>As a result of this A/B test for power consumption, you conclude that replacing the 4K video with a lower quality video on our app’s home screen not only reduces power consumption by 45%, also reduces the required network bandwidth and can potentially also improve the thermal performance of the devices.</p> <p>If your app’s business logic still requires the 4K video to be shown on the app’s screen, you can explore strategies like:</p> <ul><ul> <li>Caching the 4K video across subsequent runs of the app.</li> <li>Loading video on a user tap.</li> <li>Loading an image initially and only load the video after the screen has fully rendered (delayed loading).</li> </ul></ul> <p>The overall power consumption numbers presented in the above A/B test scenario might seem small, but it shows the techniques that app developers can use to effectively A/B test power consumption for their app’s features using the Power Profiler in Android Studio.</p> <h3>Next Steps</h3> <p>The new Power Profiler is available in <a href="https://developer.android.com/studio/releases/past-releases/as-hedgehog-release-notes#new-power-profiler" target="_blank">Android Studio Hedgehog</a> onwards. To know more, please head over to the <a href="https://developer.android.com/studio/profile/power-profiler" target="_blank">official documentation</a>.</p> A/B testing Android Studio Profiler mobile Power Consumption Power Profiler Power Rails problem solving Resources solutions Solve tutorial Android Developers 100+ Zapier Zaps (and Recipes) to Boost Productivity https://www.hongkiat.com/blog/zapier-zaps-and-recipes/ hongkiat.com urn:uuid:5a353089-6d46-b9bf-0e8a-8a751703e875 Wed, 17 Apr 2024 13:00:03 +0000 <p>Master automation with Zapier - explore over 100 Zaps and recipes for productivity.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/zapier-zaps-and-recipes/">100+ Zapier Zaps (and Recipes) to Boost Productivity</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Automation is a hot topic in the technology sector today, and for good reason. It’s a key driver of productivity, enabling maximum efficiency in various tasks, particularly when it comes to web services. This is where <a rel="nofollow noopener" target="_blank" href="https://zapier.com/">Zapier</a> comes into play – it’s one of the simplest tools for automation.</p> <p>Zapier stands out as a highly popular automation tool. It’s compatible with hundreds of web services and even supports conditional workflows. Plus, you can start using it for free! While the free version does have some limitations (like missing out on conditional workflows), it’s definitely worth exploring. Intrigued yet?</p> <div class="ref-block ref-block--post" id="ref-post-1"> <a href="https://www.hongkiat.com/blog/project-task-management-tools/" class="ref-block__link" title="Read More: 9 Tools Every Project Manager Should Know" rel="bookmark"><span class="screen-reader-text">9 Tools Every Project Manager Should Know</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/project-task-management-tools.jpg" }'> <noscript> <style>.no-js #ref-block-post-26331 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/project-task-management-tools.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">9 Tools Every Project Manager Should Know</h4> <p class="ref-description"> From task automation to team collaboration, explore the top project management tools that cater to diverse needs. Streamline... <span>Read more</span></p> </div> </div> <h4>How does Zapier function?</h4> <p>Zapier operates by establishing links between various web applications and services. These links are referred to as “Zaps”, which are based on the concept of cause and effect, or more specifically, triggers and actions. In Zapier’s terminology, a “Zap” is a connection that binds a trigger and an action together.</p> <p>To illustrate, suppose you post an image on Twitter, which is set as a trigger. Zapier recognizes this activity and then executes the corresponding action. For instance, it might take the image from your tweet and save it to your Google Drive. Fascinating, isn’t it?</p> <div class="ref-block ref-block--post" id="ref-post-2"> <a href="https://www.hongkiat.com/blog/tasks-automation-integromat-vs-zapier/" class="ref-block__link" title="Read More: Integromat vs. Zapier: Features, Prices, Pros & Cons" rel="bookmark"><span class="screen-reader-text">Integromat vs. Zapier: Features, Prices, Pros & Cons</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/tasks-automation-integromat-vs-zapier.jpg" }'> <noscript> <style>.no-js #ref-block-post-57558 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/tasks-automation-integromat-vs-zapier.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">Integromat vs. Zapier: Features, Prices, Pros & Cons</h4> <p class="ref-description"> Compare Integromat and Zapier for task automation with insights on features, pricing, and usability. <span>Read more</span></p> </div> </div> <h4>How to create and use zaps?</h4> <p>Before talking about the useful zaps, let’s see how to create and use them:</p> <ol class="steps"> <li>First of all, open and <strong>log in to Zapier</strong> (or sign up if required).</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/log-sign-zapier.jpg" alt="Log in to or sign up at Zapier" srcset="" sizes=""></noscript><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="1200" height="671" alt="Log in to or sign up at Zapier" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/log-sign-zapier.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:55%;max-width:1200px"></span></span></figure> <li>You’ll see the home screen asking you to create your first zap. <strong>Type and search for the apps</strong> you wish to connect. Next, select a trigger and an action from their dropdown and click “<strong>Use Zap</strong>“. <p> <strong>Note:</strong> Alternatively, you can <strong>click the links</strong> given below to check out those zaps directly, and then, you can continue below to configure them.</p></li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/select-services-connect-zapier.jpg" alt="Select the services to connect using Zapier" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="1200" height="526" alt="Select the services to connect using Zapier" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/select-services-connect-zapier.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:43%;max-width:1200px"></span></span></figure> <li>In the zap editor, click “<strong>Connect an Account</strong>” to connect the trigger app or service first. Then, click the “<strong>Save + Continue</strong>” button.</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/connect-account-zapier.jpg" alt="Connect your account to Zapier" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="1200" height="498" alt="Connect your account to Zapier" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/connect-account-zapier.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:41%;max-width:1200px"></span></span></figure> <li>Now, pick a sample (if asked) to test the zap and click <strong>Continue</strong>.</li> <li>Then, <strong>select the app or service</strong> to carry out the action when the trigger happens. You need to select this again even if you picked it earlier.</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/choose-action-app-inside-zapier.jpg" alt="Choose an action app inside Zapier" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="1200" height="365" alt="Choose an action app inside Zapier" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/choose-action-app-inside-zapier.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:30%;max-width:1200px"></span></span></figure> <li>Now, select an action to perform in the zap. Of course, if you selected it before, it will be pre-selected for you. So, just click <strong>Continue</strong>.</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/select-action-zap.jpg" alt="Select the action for your zap" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="993" height="711" alt="Select the action for your zap" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/select-action-zap.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:71%;max-width:993px"></span></span></figure> <li>Then, press “<strong>Connect an Account</strong>” to connect the app or service you wish to perform an action. After you connect it, click <strong>Test</strong> to check its connection with Zapier, and finally, click “<strong>Save + Continue</strong>“.</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/connect-action-service-zapier.jpg" alt="Connect the action service to Zapier" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="1200" height="518" alt="Connect the action service to Zapier" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/connect-action-service-zapier.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:43%;max-width:1200px"></span></span></figure> <li>Next, you must <strong>configure the options</strong> for the action. It will differ per the action in your zap, but it will be simple as shown here. For example, I am creating a zap for saving my tweets’ links to a text file in Dropbox.</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/set-action-details-zap.jpg" alt="Set up the action details for your zap" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="892" height="1001" alt="Set up the action details for your zap" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/set-action-details-zap.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:112%;max-width:892px"></span></span></figure> <li>Finally, on the next screen, test your zap before activating it. If you’re satisfied with it, click <strong>Finish</strong> to save and activate your zap.</li> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/test-zap-activate-zapier.jpg" alt="Test your zap then activate it in Zapier" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" width="893" height="910" alt="Test your zap then activate it in Zapier" data-lazy-src="https://assets.hongkiat.com/uploads/zapier-zaps-and-recipes/test-zap-activate-zapier.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:101%;max-width:893px"></span></span></figure> </ol> <h4>Zaps for Google Apps & Services</h4> <p>Allow me to introduce you to the concept of “zaps”, a tool for automating Google apps and services. While Google Apps Scripts offer a more customizable approach to automation, Zapier provides a quick and easy alternative.</p> <p>For those seeking greater flexibility, we recommend exploring our collection of <a href="https://www.hongkiat.com/blog/apps-scripts-gmail-users/">handy Google Apps Scripts</a>. These scripts can help you <a href="https://www.hongkiat.com/blog/gmail-advanced-search-ultimate-guide/">master Gmai</a>l and <a href="https://www.hongkiat.com/blog/google-drive-google-apps-scripts/">automate tasks in Google Drive</a>.</p> <h5>Gmail</h5> <div class="su-table su-table-alternate"> <table> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/gmail/integrations/google-drive/192/save-your-gmail-attachments-to-google-drive-automatically">Save new Gmail attachments to Google Drive</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/gmail/integrations/typeform/114/send-email-notifications-and-followups-based-on-typeform-entries">Send email notifications or follow-ups from new Typeform entries</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/gmail/integrations/trello/91/create-trello-card-from-gmail">Create Trello cards from new Gmail emails</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/gmail/integrations/dropbox/166/send-gmail-attachments-to-dropbox">Save Gmail attachments to Dropbox as original file format</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/gmail/integrations/slack/48/get-notified-of-important-emails-in-slack">Get new Gmail emails in Slack (full email)</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/gmail/integrations/wunderlist/2566/create-wunderlist-tasks-from-starred-emails-in-gmail">Create Wunderlist tasks from starred emails in Gmail</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/gmail/integrations/todoist/1047/turn-emails-into-to-do-items">Add new starred emails to Todoist as tasks</a></td> </tr> </table> </div> <h5>Google Calendar</h5> <div class="su-table su-table-alternate"> <table> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-calendar/integrations/trello/1495/create-new-trello-cards-new-google-calendar-events">Create new Trello cards from new Google Calendar events</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-calendar/integrations/todoist/1192/add-google-calendar-events-to-todoist-as-tasks">Add new Google Calendar events to Todoist as tasks</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-calendar/integrations/trello/163/turn-your-trello-cards-into-google-calendar-events">Create Google Calendar events from new Trello cards</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-calendar/integrations/toggl/1498/create-new-google-calendar-event-from-a-toggl-time-entry">Create new Google Calendar event from Toggl time entry</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-calendar/integrations/asana/1500/create-new-asana-task-from-new-google-calendar-event">Create new Asana tasks from new Google Calendar events</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-calendar/integrations/slack/356/get-a-google-calendar-meeting-reminder-in-a-slack-channel-10-minutes-before-it-starts">Post approaching Google Calendar events to a Slack channel</a></td> </tr> </table> </div> <h5>Google Contacts</h5> <div class="su-table su-table-alternate"> <table> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-contacts/integrations/hubspot/4664/send-new-hubspot-contacts-to-google-contacts">Send new HubSpot contacts to Google Contacts</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-contacts/integrations/google-sheets/1951/create-google-contacts-from-new-google-sheets-rows">Create Google Contacts from new Google Sheets rows</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-contacts/integrations/google-sheets/2640/add-google-contacts-to-your-google-sheets">Add Google Contacts to your Google Sheets</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-contacts/integrations/mailchimp/11/add-google-contacts-contacts-to-mailchimp-automatically">Add new Google Contacts contacts to MailChimp</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-contacts/integrations/office-365/2072/copy-google-contacts-contacts-to-office-365">Copy Google Contacts contacts to Office 365</a></td> </tr> </table> </div> <h5>Google Drive</h5> <div class="su-table su-table-alternate"> <table> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-drive/integrations/dropbox/167/copy-new-google-drive-files-to-dropbox">Copy new Google Drive files in a specific folder to Dropbox</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-drive/integrations/google-cloud-print/9579/print-files-from-google-drive-automatically-with-google-cloud-print">Print files from Google Drive Automatically with Google Cloud Print</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-drive/integrations/onedrive/2019/add-new-google-drive-files-to-onedrive-as-new-files">Copy new Google Drive files to OneDrive</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-drive/integrations/rss/1316/create-an-rss-feed-of-new-google-drive-files-in-a-folder">Create an RSS feed of new Google Drive files in a folder</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-drive/integrations/trello/1692/create-new-trello-cards-from-google-drive-files">Create Trello cards from new Google Drive files</a></td> </tr> </table> </div> <h5>Google Forms</h5> <div class="su-table su-table-alternate"> <table> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/slack/11018/send-google-forms-responses-to-slack">Share Google Forms responses in a Slack channel</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/mailchimp/11009/create-mailchimp-subscribers-from-google-forms-submissions">Create MailChimp subscribers from Google Forms submissions</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/gmail/11008/send-email-via-gmail-for-new-google-forms-submissions">Send email via Gmail for new Google Forms submissions</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/webhook/11086/post-new-google-forms-responses-to-a-webhook-url">POST new Google Forms responses to a webhook URL</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/google-sheets/11024/create-google-sheets-rows-from-google-forms-responses">Add Google Sheets rows for new Google Forms responses</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/google-sheets/11111/update-google-sheets-rows-from-new-google-forms-responses">Update Google Sheets rows from new Google Forms responses</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/jira/11098/create-jira-issues-from-new-google-forms-responses">Create JIRA issues from new Google Forms responses</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-forms/integrations/email/11044/get-email-notifications-for-new-google-forms-responses">Get email notifications for new Google Forms responses</a></td> </tr> </table> </div> <h5>Google Sheets</h5> <div class="su-table su-table-alternate"> <table> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-sheets/integrations/typeform/111/save-typeform-submissions-to-google-spreadsheet">Save new Typeform entries to a Google Sheets spreadsheet</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-sheets/integrations/gmail/2618/add-new-rows-to-google-sheets-based-on-gmail-contents">Save Gmail emails matching certain traits to a Google Spreadsheet</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-sheets/integrations/trello/124/create-trello-cards-from-new-google-sheets-rows">Create Trello cards from new Google Sheets rows</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-sheets/integrations/slack/1538/post-a-new-message-to-slack-whenever-a-google-sheets-row-is-updated">Post a new message to Slack whenever a Google Sheets row is updated</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-sheets/integrations/google-calendar/138/create-google-calendar-events-from-new-google-sheets-spreadsheet-rows">Create Google Calendar events from new Google Sheets spreadsheet rows</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-sheets/integrations/webhook/1035/add-data-to-a-spreadsheet-from-a-webhook">Add info to a Google Sheet from new Webhook POSTs</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/google-sheets/integrations/mailchimp/5/add-subscribers-to-mailchimp-from-a-google-sheets-spreadsheet">Add subscribers to MailChimp from a Google Sheets spreadsheet</a></td> </tr> </table> </div> <h4>Zaps for Productivity Tools</h4> <p>Next, let’s check out the zaps aka recipes for automating productivity apps like <a href="https://www.hongkiat.com/blog/tips-using-evernote/">Evernote</a> and <a href="https://www.hongkiat.com/blog/slack-tips/">Slack</a>. Then, you can boost productivity even more.</p> <h5>HubSpot</h5> <div class="su-table su-table-alternate"> <table> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/hubspot/integrations/google-contacts/4664/send-new-hubspot-contacts-to-google-contacts">Send new HubSpot contacts to Google Contacts</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/hubspot/integrations/mailchimp/1785/add-new-hubspot-contacts-to-a-mailchimp-list">Add new HubSpot contacts to a MailChimp list</a></td> </tr> <tr> <td><a rel="nofollow noopener" target="_blank" href="https://zapier.com/apps/hubspot/integrations/slack/1757/get-slack-notifications-for-new-hubspot-form-submissions">Get Slack notifications for new HubSpot form submissions</a></td> </tr> <tr> <td><a rel="nofol Internet Productivity Tools Ashutosh KS Is Your iPad Displaying the ‘iPad Unavailable’ Message? Here’s How to Fix It https://www.hongkiat.com/blog/ipad-unavailable-fixes/ hongkiat.com urn:uuid:f26b3208-99f7-6d73-75d3-3118c2feeb5c Wed, 17 Apr 2024 07:00:17 +0000 <p>Are you wondering why your iPad is displaying the “iPad Unavailable” message and not accepting your passcode? It’s likely that the passcode has been entered incorrectly too many times, triggering the device’s security lock. This is a security feature designed by Apple to prevent unauthorized access. In this article, we’ll explore the "iPad Unavailable" message&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/ipad-unavailable-fixes/">Is Your iPad Displaying the &#8216;iPad Unavailable&#8217; Message? Here&#8217;s How to Fix It</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Are you wondering why your iPad is displaying the “<em>iPad Unavailable</em>” message and not accepting your passcode? It’s likely that the passcode has been entered incorrectly too many times, triggering the device’s security lock. </p> <p>This is a security feature designed by Apple to prevent unauthorized access. In this article, we’ll explore the "<em>iPad Unavailable"</em> message and provide several solutions to resolve it.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/hero.jpg" alt="Illustrative image of an iPad showing an 'iPad Unavailable' message." srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Illustrative image of an iPad showing an 'iPad Unavailable' message." width="1500" height="835" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/hero.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:55%;max-width:1500px"></span></span></figure> <div class="su-box su-box-style-default su-box-v7" id="" style="border-color:#000000;border-radius:3px"> <div class="su-box-title" style="background-color:#333333;color:#FFFFFF;border-top-left-radius:1px;border-top-right-radius:1px">Table of Content</div> <div class="su-box-content su-u-clearfix su-u-trim" style="border-bottom-left-radius:1px;border-bottom-right-radius:1px"> <ul> <li><a href="#understand_error">Understanding "iPad Unavailable" Messages</a></li> <li><strong>Ways to Fix It:</strong> <ul> <li><a href="#method_1">Enter The Correct Passcode</a></li> <li><a href="#method_2">Fix iPad Unavailable via Dedicated Tool</a></li> <li><a href="#method_3">Unlock an Unavailable iPad via Erase Option</a></li> <li><a href="#method_4">Erase an Unavailable iPad via iCloud</a></li> <li><a href="#method_5">Get Rid of iPad Unavailable Message via iTunes</a></li> </ul> </li> <li><a href="#summary">Summary</a></li> </ul> </div> </div> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4 id="understand_error">Understanding “iPad Unavailable” Messages</h4> <p>When your iPad displays an “<em>iPad Unavailable</em>” message, it typically results from multiple incorrect passcode entries. If you enter the wrong unlock code five times in succession, the device activates its Security Lock feature.</p> <p>The duration of this security lock increases with each incorrect attempt: starting at 1 minute and extending to 5, 15, 30, and finally 60 minutes. If incorrect attempts reach 10, the message changes to “<em><a rel="nofollow noopener" target="_blank" href="https://www.isunshare.com/iphone-ipad/ipad-unavailable-message-on-screen-how-to-fix.html">iPad unavailable</a></em>” without a timer, indicating that the device is completely locked.</p> <p>Under these conditions, remembering and entering the correct passcode may no longer unlock the device.</p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4>Try These Few Ways to Fix It</h4> <h5 id="method_1">Method 1: Enter the Correct Passcode</h5> <p>This is the straightforward solution. If your device displays the message “<em>iPad Unavailable/Security Lockout, try again in X minutes</em>” on the lock screen, wait until it permits you to attempt entering the passcode again. </p> <p>Make sure to enter the correct passcode to avoid further waiting times for subsequent attempts.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/enter-passcode.jpg" alt="Enter passcode" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Enter passcode" width="1500" height="1018" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/enter-passcode.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:67%;max-width:1500px"></span></span></figure> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h5 id="method_2">Method 2: Resolve ‘iPad Unavailable’ Using a Specialized Tool</h5> <p>If your iPad shows “<em>iPad is unavailable</em>” without a timer, or you prefer not to wait for the timer to expire, consider using a dedicated software solution to unlock it.</p> <p><a rel="nofollow noopener" target="_blank" href="https://www.isunshare.com/iphone-passcode-genius/">iSunshare iPhone Passcode Genius</a> is a tool designed to remove various types of security locks from iOS and iPadOS devices, including screen lock passwords, MDM restrictions, Screen Time passwords, and Apple IDs. It supports a wide range of Apple devices, such as the latest iPhones, iPads, and iPods.</p> <p>To use iSunshare iPhone Passcode Genius to solve the problem, follow these steps:</p> <ol class="steps"> <li>Download and install iSunshare iPhone Passcode Genius on your PC. Launch the software and select the “<strong>Unlock Lock Screen</strong>” option.</li> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/unlock-lock-screen.jpg" alt="Unlock Lock Screen option in iSunshare iPhone Passcode Genius" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Unlock Lock Screen option in iSunshare iPhone Passcode Genius" width="1500" height="1010" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/unlock-lock-screen.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:67%;max-width:1500px"></span></span></figure> <li>Connect your iPad to your computer using a USB cable and click “<strong>Next</strong>” to proceed.</li> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/click-next.jpg" alt="Prompt to click 'Next' after connecting iPad" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Prompt to click 'Next' after connecting iPad" width="1500" height="1111" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/click-next.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:74%;max-width:1500px"></span></span></figure> <li>The software will automatically detect your device and prompt you to choose a location to save the firmware package. Click “<strong>Download</strong>” and wait for the download to complete.</li> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/download-firmware.jpg" alt="Downloading firmware package" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Downloading firmware package" width="1500" height="841" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/download-firmware.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1500px"></span></span></figure> <li>Once the firmware is downloaded, click “Unlock” to begin the unlocking process. The software will then immediately resolve the “iPad Unavailable” issue.</li> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/click-unlock.jpg" alt="Clicking 'Unlock' to fix iPad Unavailable" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Clicking 'Unlock' to fix iPad Unavailable" width="1500" height="931" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/click-unlock.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:62%;max-width:1500px"></span></span></figure> </ol> <p>Wait for a few minutes, the software will notify you “<strong>Unlocked screen successfully</strong>“, your iPad will reboot and you can access it and restore data from backup. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/unlock-done.jpg" alt="unlock process done" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="unlock process done" width="1500" height="907" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/unlock-done.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:60%;max-width:1500px"></span></span></figure> <p><strong>Pros: </strong>This method has a high success rate for resolving "<em>iPad Unavailable</em>" messages and other passcode-related issues on both iPads and iPhones.</p> <p><strong>Cons: </strong>It requires access to a computer to use (download and install) the software for unlocking the device.</p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h5 id="method_3">Method 3: Unlock an Unavailable iPad via Erase Option</h5> <p>No computer? No problem. Apple provides a solution for users who have accidentally triggered the iPad’s secure lock mode. The “<strong>Erase iPad</strong>” option on the iPad unavailable lock screen allows you to unlock your device without a computer. </p> <p>However, this method will completely erase all content on your device and requires your Apple ID and credentials.</p> <ol class="steps"> <li>Enter the incorrect passcode seven times consecutively until the iPad displays “<em>iPad unavailable</em>", try again in 15 minutes.” At this point, an “<strong>Erase iPad</strong>” button will appear in the bottom right corner of the screen.</li> <li>Tap the “<strong>Erase iPad</strong>” button, then tap it again to confirm that you want to erase all content.</li> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/erase-ipad.jpg" alt="Erase iPad option on the lock screen" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Erase iPad option on the lock screen" width="1500" height="1033" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/erase-ipad.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:68%;max-width:1500px"></span></span></figure> <li>Enter your Apple ID password when prompted, and tap “<strong>Erase iPad</strong>” again to begin the erasure process.</li> </ol> <p><strong>Pros: </strong>This method allows you to unlock your iPad without the need for a computer or iTunes.</p> <p><strong>Cons: </strong>It is only effective on certain devices running specific versions of iOS and requires a valid internet connection to work.</p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h5 id="method_4">Method 4: Erase an Unavailable iPad via iCloud</h5> <p>If the “<strong>Find My iPad</strong>” feature is enabled on your device, you can use iCloud to erase your iPad and when it’s erased, it’s automatically unlocked.</p> <p>Here’s how to do it:</p> <ol class="steps"> <li>Visit <a href="https://www.icloud.com/find" rel="nofollow noopener" target="_blank">iCloud.com/find</a> on another device, and log in with your Apple ID associated with the iPad.</li> <li>Click on “<strong>Find My</strong>” from the dashboard, and you’ll be prompted to re-enter your Apple ID and password for verification.</li> <li>From the “<strong>All Devices</strong>” list, select the locked iPad, click on “<strong>Erase iPad</strong>,” confirm the operation, and wait for the process to complete. The iPad will then be unlocked.</li> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/erase-via-icloud.jpg" alt="Erasing an iPad via iCloud interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Erasing an iPad via iCloud interface" width="1500" height="716" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/erase-via-icloud.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:47%;max-width:1500px"></span></span></figure> </ol> <p><strong>Pros: </strong>This method does not require any software downloads.</p> <p><strong>Cons: </strong>You must have the Apple ID and password used on the locked iPad to perform this operation.</p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h5 id="method_5">Method 5: Remove ‘iPad Unavailable’ Message via iTunes</h5> <p>You can also resolve the "<em>iPad Unavailable</em>" issue using iTunes, which does not require internet access, nor does it require your Apple ID and credentials. Here’s how you can do it:</p> <ol class="steps"> <li>Update iTunes on your Windows PC to the latest version, then connect the unavailable iPad to your computer.</li> <li>Put the iPad into Recovery Mode.</li> <li>Once in Recovery Mode, iTunes will automatically detect the iPad. You will be prompted to either “<strong>Restore</strong>” or “<strong>Update</strong>” the device. Select “<strong>Restore</strong>” and wait for the factory reset process to complete.</li> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/restore-via-itunes.jpg" alt="Restoring iPad via iTunes" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Restoring iPad via iTunes" width="1500" height="896" data-lazy-src="https://assets.hongkiat.com/uploads/ipad-unavailable-fixes/restore-via-itunes.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:59%;max-width:1500px"></span></span></figure> </ol> <p><strong>Pros: </strong>This method allows you to unlock an iPad without needing the Apple ID associated with it.</p> <p><strong>Cons: </strong>Entering Recovery Mode can be complex and may be challenging for some users.</p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4 id="summary">Summary</h4> <p>Dealing with an “<em>iPad Unavailable</em>” message can be stressful, especially if you don’t remember your passcode or if the waiting time to retry is too long. So here’s a re-cap, depending on your situation, you can select the most convenient option:</p> <ul> <li><strong><a href="#method_1">Direct Passcode Entry</a>:</strong> The simplest method, which involves entering the correct passcode after waiting for the designated lockout period to expire.</li> <li><strong><a href="#method_2">Specialized Tool (iSunshare iPhone Passcode Genius)</a>:</strong> Useful for bypassing the lock without a waiting period, particularly if the device is completely locked. However, it requires a computer to operate.</li> <li><strong><a href="#method_3">Erase via iPad Options</a>:</strong> A viable option if no computer is available, though it results in the loss of all data on the iPad unless backed up.</li> <li><strong><a href="#method_4">iCloud Erasure</a>:</strong> Effective if “Find My iPad” is enabled, allowing remote erasure and unlocking of the iPad. This method also erases all contents on the device.</li> <li><strong><a href="#method_5">iTunes Recovery</a>:</strong> A method that doesn’t require internet or Apple ID credentials but involves complicated steps to enter Recovery Mode.</li> </ul> <p>Each method serves different needs and comes with specific requirements and drawbacks. Whether you have immediate access to a computer, whether your device has “Find My iPad” enabled, and whether you know your Apple ID and passcode can all influence your choice of method. </p> <p>Evaluate your circumstances and choose the approach that best fits your situation to efficiently restore access to your iPad.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/ipad-unavailable-fixes/">Is Your iPad Displaying the &#8216;iPad Unavailable&#8217; Message? Here&#8217;s How to Fix It</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> Mobile bc Kate Dagli 10+ Online Tools to Create Cartoon Characters of Yourself https://www.hongkiat.com/blog/11-sites-to-create-cartoon-characters-of-yourself/ hongkiat.com urn:uuid:40068831-5bcd-b955-e2c5-f7c6a9bfb1a5 Tue, 16 Apr 2024 13:00:11 +0000 <p>Transform yourself into a cartoon character with these online tools. Get creative and have fun with your online persona. Easy and free to use!</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/11-sites-to-create-cartoon-characters-of-yourself/">10+ Online Tools to Create Cartoon Characters of Yourself</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>If you are <strong>not comfortable using real photos</strong> to represent yourself in any online profiles and avatars, why not create a cartoon character of yourself? It’ll be fun and unique to others when you are <strong>representing yourself in a cartoonized way in your online profiles</strong>.</p> <p>Thanks to many free web services, you don’t have to pay an artist for your cartoon illustrations. All you have to do is upload your photo or run some mix-and-match. Here are 13 websites that allow you to create a <strong>cartoon character of yourself</strong>.</p> <div class="ref-block ref-block--post" id="ref-post-3"> <a href="https://www.hongkiat.com/blog/25-websites-to-have-fun-with-your-photos/" class="ref-block__link" title="Read More: 10 Websites to Have Fun With Your Photos" rel="bookmark"><span class="screen-reader-text">10 Websites to Have Fun With Your Photos</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/25-websites-to-have-fun-with-your-photos.jpg" }'> <noscript> <style>.no-js #ref-block-post-3884 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/25-websites-to-have-fun-with-your-photos.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">10 Websites to Have Fun With Your Photos</h4> <p class="ref-description"> Getting a little bored with how your photos are presented online? How about injecting some fun and humor... <span>Read more</span></p> </div> </div> <h4><a rel="nofollow noopener" target="_blank" href="https://sapiens.ui8.net/">Sapiens Character Builder</a></h4> <p>Explore a variety of customizable body parts, backgrounds, and poses in three styles to create character illustrations for your projects. Sapiens Character Builder by UI8 provides a straightforward way to assemble unique characters.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Sapiens-Character-Builder.jpg" alt="Sapiens Character Builder<" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Sapiens Character Builder<" width="1500" height="993" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Sapiens-Character-Builder.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://www.cartoonify.de/#cartoonify">Cartoonify.de</a></h4> <p>Cartoonify is a straightforward online tool for creating cartoon avatars. You can choose from 300 different graphic elements to add to your character and save your creation in PNG, SVG, or upload to Gravatar. There’s also a how-to guide to help you create your character on the site. </p> <figure class="border-solid-1"><img src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Cartoonif-de.jpg" alt="Cartoonify.de"></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://imglarger.com/Cartoonizer">AI Cartoonizer</a></h4> <p>AI Cartoonizer can turn any photo into a cartoon-style image. It lets you turn your face into anime, caricature, or Disney-style characters within a few seconds. The tool is also available for Android and iOS. You can edit and tinker with the created characters and add text, frames, and additional effects. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/AI-Cartoonizer.jpg" alt="AI Cartoonizer" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="AI Cartoonizer" width="1500" height="752" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/AI-Cartoonizer.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:50%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://www.media.io/photo-to-cartoon.html">Media.io</a></h4> <p>Meda.io is an instant cartoon character maker that fast and free. Just upload your photo, start the process, and get an interesting image within seconds. You can give effects to your photos or turn them into caricatures and share the characters with friends or on social media. Plus, you don’t have to create an account to convert your photos. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Media-io.jpg" alt="Media.io" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Media.io" width="1500" height="1183" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Media-io.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:78%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://vanceai.com/toongineer-cartoonizer/">VanceAI Toongineer</a></h4> <p>VanceAI Toongineer is an AI-powered tool that turns your normal photos into cartoons in the quickest way possible. You can give your pictures some amazing effects and artistic touch. The created images are high-quality, so you can easily get them printed.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/VanceAI-Toongineer.jpg" alt="VanceAI Toongineer" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="VanceAI Toongineer" width="1500" height="801" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/VanceAI-Toongineer.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:53%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://imagetocartoon.com/">Image to Cartoon</a></h4> <p>Image to Cartoon enables you to turn your photos into cartoon characters and avatars with just a few clicks. You can add any interesting body (batman, superman, aviator) to your characters and add your characters to a cool background and have fun with it. The best part is, the image you’ll create will be deleted from the app within 3 hours. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Image-to-Cartoon.jpg" alt="Image to Cartoon" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Image to Cartoon" width="1500" height="652" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Image-to-Cartoon.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:43%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://www.bitmoji.com/">Bitmoji</a></h4> <p>Create realistic and creative cartoon characters with Bitmoji. On the website, you need to create an account and start making a perfect bitmoji adding your peculiar features. Moreover, you can share the created bitmoji in any iOS or Android app and add them to iMessage, Gboard, or as a Chrome extension to your browser. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Bitmoji.jpg" alt="Bitmoji" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Bitmoji" width="1500" height="807" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Bitmoji.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:53%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://www.photo-kako.com/en/">Photokako</a></h4> <p>Claiming to be one of the best online photo editors in Japan, Photokako lets you turn your photos into different effects and characters. Interestingly, the site features hundreds of effects or editing samples so you can easily pick the best for your photos. Plus, its free and really easy to use. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Photokako.jpg" alt="Photokako" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Photokako" width="1500" height="995" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Photokako.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://avatarmaker.com/">Avatar Maker</a></h4> <p>Avatar maker can help you create an interesting avatar for yourself or for your projects. Through an interesting interface, you can add different elements to your avatar in terms of hair, face, eyes, clothes, and background. Once done, you can download your character in SVG or PNG format. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Avatar-Maker.jpg" alt="Avatar Maker" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Avatar Maker" width="1500" height="990" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Avatar-Maker.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:66%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://www.cutout.pro/turn-selfie-into-cartoon-anime-comic/">Cutout.pro</a></h4> <p>An AI-powered tool, Cutout.pro, can turn your portrait photos or selfies into 3D cartoon characters. You can drag-and-drop, upload, or paste the image URL and cartoonize it with one click. The website is also available as an Android and iOS app. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Cutout-pro.jpg" alt="Cutout.pro" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Cutout.pro" width="1500" height="855" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Cutout-pro.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://www.befunky.com/create/photo-to-cartoon/">Befunky Photo to Cartoon</a></h4> <p>Befunky Photo to Cartoon lets you upload your photos on PNG, JPG, or BDF format and convert them into cartoon characters. There are different editing features for changing color, touchups and adding text, graphics, and frames etc. You can also choose from a number of pre-made effects and apply to your photos. </p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Befunky-Photo-to-Cartoon.jpg" alt="Befunky Photo to Cartoon" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Befunky Photo to Cartoon" width="1500" height="844" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Befunky-Photo-to-Cartoon.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://www.instructables.com/Turn-Yourself-Into-a-Cartoon/">Instructables craft</a></h4> <p>The site has detailed instructions how to create a drawing or cartoon of yourself in Photoshop or Illustrator. Note: you need to have Photoshop or Illustrator to follow the instructions and perhaps some drawing skills.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Instructables-craft.jpg" alt="Instructables craft" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Instructables craft" width="1500" height="1081" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Instructables-craft.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:72%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://illustmaker.abi-station.com/index_en.shtml">Portrait Illustration Maker</a></h4> <p>Portrait Illustration make is a free cartoon avatar generator. Just hit the “Randomizer” button and the site will automatically generate avatars randomly. You can save the Avatar image by right-clicking them and using the Save Image As option from the context menu.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Portrait-Illustration-Maker.jpg" alt="Portrait Illustration Maker" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Portrait Illustration Maker" width="1500" height="786" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Portrait-Illustration-Maker.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:52%;max-width:1500px"></span></span></figure> <h4><a rel="nofollow noopener" target="_blank" href="https://cartoon.pho.to/">Pho.to</a></h4> <p>This awesome site can not only turn your landscape photo into a watercolor drawing, but also make your face morph. Just upload your photo to the website and get numerous changes of facial expressions.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Pho-to.jpg" alt="Pho.to" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Pho.to" width="1500" height="619" data-lazy-src="https://assets.hongkiat.com/uploads/11-sites-to-create-cartoon-characters-of-yourself/Pho-to.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:41%;max-width:1500px"></span></span></figure> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/11-sites-to-create-cartoon-characters-of-yourself/">10+ Online Tools to Create Cartoon Characters of Yourself</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> Internet Cartoon Nancy Young 10 Best Support Ticketing Systems for 2024 (Free and Paid) https://www.hongkiat.com/blog/top-support-ticket-systems/ hongkiat.com urn:uuid:f0ad4e40-1c07-b4cc-7cd2-cff6349b36d5 Mon, 15 Apr 2024 13:15:23 +0000 <p>Whether you’re running a small online business or a large corporation, if your business revolves around customer service and interaction, adopting a ticketing system is a wise move, or at the very least, worth considering. These systems are more than mere tools; they’re vital lifelines for businesses dedicated to exceptional customer service and efficient support&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/top-support-ticket-systems/">10 Best Support Ticketing Systems for 2024 (Free and Paid)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Whether you’re running a small online business or a large corporation, if your business revolves around customer service and interaction, adopting a ticketing system is a wise move, or at the very least, worth considering. </p> <p>These systems are more than mere tools; they’re vital lifelines for businesses dedicated to exceptional customer service and efficient support processes. The ideal ticketing system can elevate your support strategy, transforming every customer interaction into a chance for growth and building loyalty. If your aim is to streamline and keep track of customer interactions, these systems are indispensable. </p> <p>In this post, we’re excited to spotlight the best support ticketing systems available, both free and paid. </p> <h5>Overview:</h5> <div class="su-table su-table-alternate su-table-fixed"> <table> <tbody> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/zendesk.png" alt="Zendesk logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Zendesk logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/zendesk.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Zendesk</strong>: Great when integrated with other Zendesk products. <a href="#zendesk">See details ↓</a> <p> <small>Starts at $19/agent/mth.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/zendesk-helpdesk" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try for free </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/atera.png" alt="Atera logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Atera logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/atera.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Atera</strong>: All-in-one IT management with flat-rate pricing <a href="#atera">See details ↓</a> <p> <small>Starts at $99/user/mth.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/atera" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try for free </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/ninjaone.png" alt="NinJaOne logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="NinJaOne logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/ninjaone.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>NinjaOne</strong>: Boosts IT efficiency with rich features. <a href="#ninjaone">See details ↓</a> <p> <small>Visit site for pricing.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/ninjaone" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try for free </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/hiver.png" alt="Hiver logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Hiver logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/hiver.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Hiver</strong>: Integrates with Gmail. <a href="#hiver">See details ↓</a> <p> <small>Starts at $15/user/mth.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/hiver" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try for free </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/sysaid.png" alt="Sysaid logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Sysaid logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/sysaid.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>SysAid Helpdesk</strong>: Easy to set up. <a href="#sysaid">See details ↓</a> <p> <small>Visit site for pricing.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/sysaid-helpdesk" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Check price </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/freshdesk.png" alt="Freshdesk logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Freshdesk logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/freshdesk.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Freshdesk</strong>: Free for up to 10 agents. <a href="#freshdesk">See details ↓</a> <p> <small>Starts at $15/agent/mth. Has free plan.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/freshdesk-helpdesk" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try for free </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/zoho-desk.png" alt="Zoho Desk logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Zoho Desk logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/zoho-desk.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Zoho Desk</strong>: Great choice for current Zoho users. <a href="#zohodesk">See details ↓</a> <p> <small>Starts at $14/user/mth.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/zoho-desk" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try it </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/manageengine.png" alt="ManageEngine logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="ManageEngine logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/manageengine.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>ManageEngine ServiceDesk Plus</strong>: Easy-to-use interface. <a href="#manageengine">See details ↓</a> <p> <small>Starts at $10/user/mth.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/manageengine-helpdesk" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try it </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/salesforce.png" alt="Salesforce logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Salesforce logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/salesforce.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Salesforce Service Cloud</strong>: With the most comprehensive features. <a href="#salesforce">See details ↓</a> <p> <small>Starts at $25/user/mth.</small></p> <p> <a href="https://www.hongkiat.com/blog/go/salesforce-helpdesk" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try for free </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/deskpro.png" alt="Deskpro logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Deskpro logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/deskpro.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Deskpro</strong>: Install and run on the cloud or on-premise. <a href="#deskpro">See details ↓</a> <p> <small>Starts at $29/agent/mth.</small></p> <p> <a href="https://www.deskpro.com/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try it </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/hesk.png" alt="Hesk logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Hesk logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/hesk.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Hesk</strong>: Free and self-hosted content management system. <a href="#hesk">See details ↓</a> <p> <small>Free.</small></p> <p> <a href="https://www.hesk.com/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Download </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/tidio.png" alt="Tidio logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Tidio logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/tidio.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>Tidio Ticketing System</strong>: Easy to set up, requiring no coding knowledge. <a href="#tidio">See details ↓</a> <p> <small>Starts at $29/agent/mth. Has free plan.</small></p> <p> <a href="https://www.tidio.com/ticketing/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Try for free </span></a></p></td> </tr> <tr> <td width="180" valign="top" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/logo/png/osticket.png" alt="osTicket logo" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="osTicket logo" width="1024" height="768" data-lazy-src="https://assets.hongkiat.com/uploads/logo/png/osticket.png"><span class="img-ratio-placeholder__fill" style="padding-bottom:75%;max-width:1024px"></span></span></td> <td><strong>osTicket</strong>: Free, open-source, and community-supported. <a href="#osticket">See details ↓</a> <p> <small>Free. Cloud-hosted starts at $12/agent/mth.</small></p> <p> <a href="https://osticket.com/" class="su-button su-button-style-flat" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px" target="__blank" rel="noopener nofollow"><span style="color:#FFFFFF;padding:0px 16px;font-size:13px;line-height:26px;border-color:#d16e71;border-radius:0px"> Download </span></a></p></td> </tr> </tbody> </table> </div> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4 id="zendesk"><a href="https://www.hongkiat.com/blog/go/zendesk-helpdesk" rel="nofollow noopener" class="js-aw-brand-link" data-feed="ZvisSGyMi3bXTxWP499DKvYqQKyC9zFK" target="_blank">Zendesk</a></h4> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a href="https://www.hongkiat.com/blog/go/zendesk-helpdesk" rel="nofollow noopener" class="js-aw-brand-link" data-feed="ZvisSGyMi3bXTxWP499DKvYqQKyC9zFK" target="_blank"><noscript><IMG src="https://assets.hongkiat.com/uploads/top-support-ticket-systems/Zendesk.jpg" alt="Zendesk" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Zendesk" width="1000" height="697" data-lazy-src="https://assets.hongkiat.com/uploads/top-support-ticket-systems/Zendesk.jpg"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:69%;max-width:1000px"></span></span></figure> <p>The first in our list is Zendesk. It is a great tool created to cater to the requirements of customers, service agents, and managers. It has a user-friendly interface that lets customers raise their concerns or issues through different platforms such as websites, emails, phone calls, and even Facebook. Service agents can view customer details and participate in group discussions, while managers have access to important data and reports for analysis.</p> <p>Additionally, Zendesk can be used on Android and iOS devices.</p> <h5>Zendesk’s price:</h5> <p>Zendesk starts at <strong>$19/month</strong>. <a rel="nofollow noopener" target="_blank" href="https://www.zendesk.com/demo/?demoStep=personal">Try a demo.</a></p> <h5>What we like:</h5> <div class="su-list" style="margin-left:0px"> <ul> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> There are many options for customer engagement.</li> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> The tool supports a variety of file formats for upload.</li> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> It offers a selection of community themes and a feature for global UI changes.</li> </ul> </div> <h5>What we don’t like:</h5> <div class="su-list" style="margin-left:0px"> <ul> <li><i class="sui sui-times-circle" style="color:#e5918f"></i> There isn’t much flexibility for structural modifications.</li> <li><i class="sui sui-times-circle" style="color:#e5918f"></i> The ticketing system lacks a feature for sorting.</li> <li><i class="sui sui-times-circle" style="color:#e5918f"></i> Integrations do not support two-way synchronization.</li> </ul> </div> <p><a href="https://www.hongkiat.com/blog/go/zendesk-helpdesk" class="su-button su-button-style-flat js-aw-brand-link" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="_self" rel="nofollow noopener"><span style="color:#FFFFFF;padding:7px 20px;font-size:16px;line-height:24px;border-color:#d16e71;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none"><i class="sui sui-external-link" style="font-size:16px;color:#FFFFFF"></i> Check out Zendesk </span></a></p> <div class="su-divider su-divider-style-list" style="margin:15px 0;border-width:3px;border-color:#999999"></div> <h4 id="atera"><a href="https://www.hongkiat.com/blog/go/atera" rel="nofollow noopener" target="_blank" class="js-aw-brand-link" data-feed="8AEEe3JbvTyYZTGnPoTzw4yGxKxIdyyB">Atera Helpdesk</a></h4> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><a href="https://www.hongkiat.com/blog/go/atera" rel="nofollow noopener" target="_blank" class="js-aw-brand-link" data-feed="8AEEe3JbvTyYZTGnPoTzw4yGxKxIdyyB"><noscript><IMG src="https://assets.hongkiat.com/uploads/top-support-ticket-systems/atera-helpdesk.jpg" alt="Atera Helpdesk" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Atera Helpdesk" width="1536" height="716" data-lazy-src="https://assets.hongkiat.com/uploads/top-support-ticket-systems/atera-helpdesk.jpg"></a><span class="img-ratio-placeholder__fill" style="padding-bottom:46%;max-width:1536px"></span></span></figure> <p>Atera Helpdesk is an all-in-one IT platform that combines remote monitoring and management with professional service automation. This powerful tool simplifies IT operations by integrating various functions into a single, easy-to-use interface. IT professionals can efficiently manage support tickets, monitor client networks, and conduct remote troubleshooting. </p> <p>Featuring real-time analytics and automated workflows, Atera optimizes efficiency and reduces response times. Its comprehensive set of tools supports everything from patch management to security monitoring, ensuring IT systems operate smoothly and securely. Atera’s predictive analytics enhance proactive maintenance and facilitate informed decision-making, improving customer satisfaction. </p> <p>Ideal for small to medium-sized IT businesses, Atera Helpdesk offers a cost-effective, flat-rate pricing model that allows for unlimited scalability, helping IT teams reduce manual tasks and focus on more strategic initiatives. </p> <h5>Atera’s price:</h5> <p>Atera offers a free 30-day trial with no credit card required.</p> <p>Its Pro paid plan starts at $99/month. Other paid plans include the Growth plan, starting at $129/month, and the Power plan at $169/month.</p> <h5>What we like:</h5> <div class="su-list" style="margin-left:0px"> <ul> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> Combines RMM, PSA, and remote access.</li> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> Unlimited devices, cost-effective for growth.</li> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> Intuitive interface simplifies IT management.</li> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> Quick and helpful customer service.</li> <li><i class="sui sui-check-circle" style="color:#b1d9a5"></i> Streamlines tasks like alerts and backups.</li> </ul> </div> <h5>What we don’t like:</h5> <div class="su-list" style="margin-left:0px"> <ul> <li><i class="sui sui-times-circle" style="color:#e5918f"></i> Mobile app less functional than desktop version.</li> <li><i class="sui sui-times-circle" style="color:#e5918f"></i> Takes time to master features.</li> </ul> </div> <p><a href="https://www.hongkiat.com/blog/go/atera" class="su-button su-button-style-flat js-aw-brand-link" style="color:#FFFFFF;background-color:#bc2f34;border-color:#97262a;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px" target="_ Internet appwiki gc Ashutosh KS 4 Strategies to Increase Low Average Order Value (AOV) in E-commerce https://www.hongkiat.com/blog/increase-low-average-order-value/ hongkiat.com urn:uuid:7ca4363f-4f7b-6020-e0d0-52485dbcc2fa Fri, 12 Apr 2024 07:00:44 +0000 <p>Dealing with a consistent stream of low-priced orders can be quite frustrating. This situation means the revenue per transaction is low, which hurts the bottom line and business growth. Could it be because of lackluster offers, or is there some hidden reason influencing shoppers not to fill up their carts with more products? Many stores&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/increase-low-average-order-value/">4 Strategies to Increase Low Average Order Value (AOV) in E-commerce</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Dealing with a consistent stream of low-priced orders can be quite frustrating. This situation means the revenue per transaction is low, which hurts the bottom line and business growth. </p> <figure data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/hero.jpg" alt="Increase Low Average Order Value" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Increase Low Average Order Value" width="1600" height="900" data-lazy-src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/hero.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1600px"></span></span></figure> <p>Could it be because of lackluster offers, or is there some hidden reason influencing shoppers not to fill up their carts with more products?</p> <p>Many stores miss out on potential earnings by not adequately incentivizing customers who have already shown an interest in their brand. Or perhaps they attempt to do so but leave a lot of money on the table.</p> <p>It’s essential to implement strategies to increase the average order value (AOV), which is the average value of all your sales transactions.</p> <h4>Factors Contributing to Low AOV</h4> <p>Let’s take the example of the famous <a rel="nofollow noopener" target="_blank" href="https://us.dollarshaveclub.com/">Dollar Shave Club</a>, which skyrocketed to success by promoting one-dollar razor blades. </p> <p>Undoubtedly, they had great marketing from the very beginning on all fronts, such as creating winning video ads, which are still showcased as a shining example.</p> <p>However, their business wouldn’t have survived by selling one-dollar blades alone, not even at scale. The average order value (AOV) would have been way too low to make it a profitable venture. Their major profits come from other products, as they offer a range of men’s care products from electric trimmers and razors to shower gels and deodorants.</p> <p>You should similarly think about your store. Shoppers may come in for one enticing offer, possibly priced lower, but end up loving your brand and purchasing more than they originally planned.</p> <p>To increase average order value, there are a few key things to consider:</p> <ul> <li><strong>Pricing Strategies</strong> – Although they depend on the market and your ideal customer persona for whom the product is made, you still have control over many factors such as minimum order requirements, bundling, discounts, tiered pricing, cross-selling, and discount strategies. Be careful with discounts. If people see discounted offers too frequently, they may never purchase products at the normal price.</li> <li><strong>Product Assortment</strong> – Shoppers appreciate having a variety of options. Only if the website is difficult to navigate and customers feel overwhelmed by the abundance of products, could it pose a hurdle. To increase average order value (AOV), the product assortment must be well organized, especially with complementary products available for cross-selling.</li> <li><strong>Customer Behavior</strong> – You need to understand deeply how your customers buy. How do they come to your website? Is it from social media or Google? <strong>The behavior of visitors</strong> on your website can be easily monitored. By analyzing their user’s journey, you’ll be able to pinpoint hurdles and what stops them from buying more.</li> <li><strong>Industry Dynamics</strong> – Purchasing patterns and AOV depend on the industry you’re in, so it’s beneficial to understand AOV standards to gauge where you stand among the competition.</li> </ul> <h4>Strategies for Increasing Low Average Order Value</h4> <p>Here are successful strategies to implement to increase low AOV.</p> <h5>1. Product Bundling</h5> <p>To ensure success, package products that complement each other or make sense together, and offer them at a discounted price. </p> <p>For instance, you can pair shower gel with body lotion and deodorant, as these items are commonly used together.</p> <p>Additionally, consider creating themed bundles for special occasions like Christmas or Valentine’s Day, or invent your own themes like <a rel="nofollow noopener" target="_blank" href="https://us.jimmylion.com/">Jimmy Lion</a>, a renowned sock brand, has done with gift packs such as the <em>Dog Day Pack</em>, <em>Cat Night Pack</em>, and <em>Frida Kahlo Pack</em>.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/jimmy-lion-socks-bundle.jpg" alt="Jimmy Lion socks bundle" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Jimmy Lion socks bundle" width="1344" height="636" data-lazy-src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/jimmy-lion-socks-bundle.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:47%;max-width:1344px"></span></span></figure> <div class="sue-icon-text su-image-caption" data-url="" data-target="self" style="min-height:34px;padding-left:36px;color:#333333"> <div class="sue-icon-text-icon" style="color:#333333;font-size:24px;width:24px;height:24px"><i class="sui sui-photo" style="font-size:24px;color:#333333"></i></div> <div class="sue-icon-text-content su-u-trim" style="color:#333333"><a rel="nofollow noopener" target="_blank" href="https://us.jimmylion.com/collections/sock-packs">Jimmylion</a></div> <div style="clear:both;height:0"></div> </div> <p>Another effective tactic is to combine a bestseller with items that aren’t selling as well, thus facilitating the sale of accumulated stock. In addition to discounts, consider adding an exclusive item that’s otherwise unavailable to make the bundle more appealing.</p> <p>Furthermore, you can combine variations of the same product, like the socks mentioned above. This strategy works particularly well in industries like cosmetics or food, where scents and tastes are easy to combine.</p> <p>However, ensure that your bundles present clear benefits to the customer without causing confusion or hurting the brand image.</p> <h5>2. Upselling and Cross-Selling</h5> <p>These two terms refer to techniques we employ when shoppers browse your website or during the checkout process.</p> <p>Upselling involves convincing the customer to purchase a more expensive item or a higher-tier option than what they originally intended.</p> <p>There are various methods for upselling. In practical terms, we also call it upselling when we offer shoppers a bundle instead of an individual product. Often, an upsell involves a package deal. With stackable products like razor blades, toothpaste, or supplements, offering more of the same at a discount is an effective strategy.</p> <p>For example, the bone broth brand <a rel="nofollow noopener" target="_blank" href="https://broyaliving.com/">Broya</a> upsells by offering different quantities on the product page. In addition to providing options for 5, 8, 16, or 24 pouches in a variety pack, they show how many servings you get with each option. This increases the perceived value for customers.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/broya-upselling.jpg" alt="Broya upselling" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Broya upselling" width="1337" height="637" data-lazy-src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/broya-upselling.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:47%;max-width:1337px"></span></span></figure> <div class="sue-icon-text su-image-caption" data-url="" data-target="self" style="min-height:34px;padding-left:36px;color:#333333"> <div class="sue-icon-text-icon" style="color:#333333;font-size:24px;width:24px;height:24px"><i class="sui sui-photo" style="font-size:24px;color:#333333"></i></div> <div class="sue-icon-text-content su-u-trim" style="color:#333333"><a rel="nofollow noopener" target="_blank" href="https://broyaliving.com/products/variety-pack?selling_plan=20398112986&variant=44026533806298">BroyaLiving</a></div> <div style="clear:both;height:0"></div> </div> <p>Now, let’s consider an example of cross-selling, a technique aimed at selling complementary products.</p> <p><a rel="nofollow noopener" target="_blank" href="https://byloftie.com/">Loftie</a>, a brand specializing in items that enhance the sleeping experience, employs a cross-selling technique. When you add their alarm clock to your cart, they also offer you a sleep mask.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/loftie-alarm-mask.jpg" alt="Loftie alarm mask" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Loftie alarm mask" width="1300" height="598" data-lazy-src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/loftie-alarm-mask.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:46%;max-width:1300px"></span></span></figure> <p><small>Credit: <a rel="nofollow noopener" target="_blank" href="https://byloftie.com/collections/shop">ByLoftie</a></small></p> <p>Since a sleep mask is significantly cheaper compared to an alarm clock, it appears inexpensive. This perception stems from comparing one item to another, leading to a psychological effect where we perceive the mask as cheaper than if we were considering it on its own.</p> <p>The key to success lies in personalization. Offer something relevant, such as items frequently bought together. Otherwise, recommend your best sellers, especially if you have not yet collected extensive purchase history data.</p> <h5>3. Free Shipping Thresholds and Incentives</h5> <p>Shipping fees are the most common reason why shoppers abandon their carts. At least <a rel="nofollow noopener" target="_blank" href="https://baymard.com/lists/cart-abandonment-rate">48% of cart abandonments</a> happen because extra costs like shipping and fees are too high. No other reason for cart abandonment reaches such a high rate.</p> <p>Determining a free shipping threshold requires careful planning and analysis of profit margins. There are several approaches to consider.</p> <p>Some stores decide to include shipping costs in the product price by raising it. However, if your average order value (AOV) tends to be low, the free shipping threshold should be set at least around 30% higher. The objective is to incrementally raise the bar for free shipping but not to scare away customers at the same time.</p> <p>Show shoppers both a visual and numerical representation of how much more they need to spend to reach the minimum order amount for free shipping. This method has proven highly effective in motivating them to make additional purchases.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/olipop-freeshipping.jpg" alt="Olipop free shipping" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Olipop free shipping" width="1158" height="570" data-lazy-src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/olipop-freeshipping.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:49%;max-width:1158px"></span></span></figure> <div class="sue-icon-text su-image-caption" data-url="" data-target="self" style="min-height:34px;padding-left:36px;color:#333333"> <div class="sue-icon-text-icon" style="color:#333333;font-size:24px;width:24px;height:24px"><i class="sui sui-photo" style="font-size:24px;color:#333333"></i></div> <div class="sue-icon-text-content su-u-trim" style="color:#333333"><a rel="nofollow noopener" target="_blank" href="https://drinkolipop.com/products/tropical-punch">drinkolipop</a></div> <div style="clear:both;height:0"></div> </div> <p>Finally, combining free shipping with incentives such as signing up for a loyalty program or membership can further raise the appeal. We’ll delve into these strategies in more detail below.</p> <h5>4. Customer Loyalty Programs and Memberships</h5> <p>Acquiring a new customer typically costs five times more than retaining an existing one. Repeat customers are your most valuable asset. Let’s examine this through the lens of the Pareto principle.</p> <p>The <a rel="nofollow noopener" target="_blank" href="https://en.wikipedia.org/wiki/Pareto_principle">Pareto principle</a>, or the 80/20 rule, suggests that 80% of outcomes result from 20% of causes. Applied to e-commerce, this implies that a significant portion of revenue or profits comes from a small fraction of customers.</p> <p>In other words, if you have this core 20% of customers who are enthusiastic about your products and keep coming back, it forms a strong foundation for business growth without major retention challenges.</p> <p>The first step is to create loyalty or membership subscriptions. Apart from offering discounts, some brands take it a step further. Take, for example, <a rel="nofollow noopener" target="_blank" href="https://www.potgang.co.uk/">Pot Gang</a>, a UK brand specializing in gardening gear.</p> <p>It’s not just their watering cans that have excited people about the brand.</p> <p>They offer a unique membership subscription where members receive a monthly box with seeds, pots, and everything a beginner needs to start growing veggies and herbs.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/pot-gang-membership.jpg" alt="Pot Gang membership" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Pot Gang membership" width="1328" height="634" data-lazy-src="https://assets.hongkiat.com/uploads/increase-low-average-order-value/pot-gang-membership.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:47%;max-width:1328px"></span></span></figure> <div class="sue-icon-text su-image-caption" data-url="" data-target="self" style="min-height:34px;padding-left:36px;color:#333333"> <div class="sue-icon-text-icon" style="color:#333333;font-size:24px;width:24px;height:24px"><i class="sui sui-photo" style="font-size:24px;color:#333333"></i></div> <div class="sue-icon-text-content su-u-trim" style="color:#333333"><a rel="nofollow noopener" target="_blank" href="https://www.potgang.co.uk/products/the-box">Pot Gang</a></div> <div style="clear:both;height:0"></div> </div> <p>Each month, subscribers receive different seeds with pots to grow seasonal plants. It’s not solely about selling gear, but rather about creating a <em>‘gang’</em> of gardeners and guiding them step by step on their gardening journey.</p> <p>Loyalty programs and memberships not only increase customer lifetime value but also average order value. For instance, a customer who subscribes to toothpaste is more likely to purchase a toothbrush and dental floss as well.</p> <h4>Conclusion</h4> <p>We’ve outlined four reliable strategies for boosting the average order value in e-commerce stores. Numerous factors influence a shopper’s journey. By systematically approaching and understanding purchasing signals and patterns, you can significantly enhance revenue per transaction and grow your business.</p> <p>If people have already visited your website, they’re interested in and need what you offer. This presents the ideal opportunity to capture their attention, encourage them to purchase additional products, and guide them through a seamless checkout process.</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/increase-low-average-order-value/">4 Strategies to Increase Low Average Order Value (AOV) in E-commerce</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> E-Commerce Zorica Milinkovic The First Beta of Android 15 http://android-developers.googleblog.com/2024/04/the-first-beta-of-android-15.html Android Developers Blog urn:uuid:2c309a60-fb4c-2f12-597a-b658b9d37196 Thu, 11 Apr 2024 20:21:44 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" style="display: none;" /> <em> Posted by <a href="https://twitter.com/davey_burke" target="_blank">Dave Burke</a>, VP of Engineering </em> <div class="separator" style="border: 0px; clear: both; float: right; padding: 0px; width: 45%;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Android 14 logo" border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" width="320" /></a></div> <p><br /></p><p>Today we're releasing the first beta of Android 15. With the progress we've made refining the features and stability of Android 15, it's time to open the experience up to both developers and early adopters, so you can now <a href="https://www.google.com/android/beta" target="_blank">enroll any supported Pixel device here</a> to get this and future Android 15 Beta and feature drop Beta updates over-the-air.</p> <p>Android 15 continues our work to build a platform that helps improve your productivity, give users a premium app experience, <a href="https://developer.android.com/privacy-and-security/about" target="_blank">protect user privacy and security</a>, and make your app accessible to as many people as possible — all in a vibrant and diverse ecosystem of devices, silicon partners, and carriers.</p> <p>Android delivers enhancements and new features year-round, and your feedback on the <a href="https://www.google.com/android/beta" target="_blank">Android beta</a> program plays a key role in helping Android continuously improve. The <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a> has lots more information about the beta, including <a href="https://developer.android.com/about/versions/15/download" target="_blank">downloads for Pixel</a> and the <a href="https://developer.android.com/about/versions/15/overview#timeline" target="_blank">release timeline</a>. We’re looking forward to <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">hearing what you think</a>, and thank you in advance for your continued help in making Android a platform that works for everyone.</p> <p>We’ll have lots more to share as we move through the release cycle, and be sure to tune into <a href="https://io.google/2024/" target="_blank">Google I/O</a> where you can dive deeper into topics that interest you with over 100 sessions, workshops, codelabs, and demos.</p> <h3>Edge-to-edge</h3> <p>Apps targeting Android 15 are displayed <a href="https://developer.android.com/about/versions/15/behavior-changes-15#window-insets" target="_blank">edge-to-edge by default</a> on Android 15 devices. This means that apps no longer need to explicitly call <a href="https://developer.android.com/reference/androidx/core/view/WindowCompat#setDecorFitsSystemWindows%28android.view.Window,boolean%29" target="_blank"><span style="font-family: courier;">Window.setDecorFitsSystemWindows(false)</span></a> or <a href="https://developer.android.com/reference/androidx/activity/ComponentActivity#%28androidx.activity.ComponentActivity%29.enableEdgeToEdge%28androidx.activity.SystemBarStyle,androidx.activity.SystemBarStyle%29" target="_blank"><span style="font-family: courier;">enableEdgeToEdge()</span></a> to show their content behind the system bars, although we recommend continuing to call <span style="color: #0d904f; font-family: courier;">enableEdgeToEdge()</span> to get the edge-to-edge experience on earlier Android releases.</p> <p>To assist your app with going edge-to-edge, <a href="https://developer.android.com/develop/ui/compose/layouts/insets#inset-handling" target="_blank">many of the Material 3 composables</a> handle insets for you, based on how the composables are placed in your app according to the Material specifications.</p> <image><div style="text-align: center;"><img alt="a side-by-side comparison of App targets SDK 34 (left) and App targets SDK 35 (right) demonstrating edge-to-edge on an Android 15 device" border="0" height="256" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKdl8xQlPbo3KV4OdjTXDbYqYB6pa79ZdHufkosNJknB724uMn6X51izHYacqIzybKdnDhNA5tAbBD7zGrWg5AbO2HklLe_3w_NZU6KouuioIk_31JQFN-HU8xjHOVHFeVCJwbMCNE58x8zvjPMhJ9KibYroCylqaRNz8BmFsN1KLg_aNdWG_bRs3uGTk/w640-h256/AD15Beta1-Inline%20(2000%20x%20800%20px).gif" width="640" /></div><imgcaption><center><em>On the left: App targets SDK 34 (Android 14) and is not edge-to-edge on an Android 15 device. On the right: App targets SDK 35 (Android 15) and is edge-to-edge on an Android 15 device. Note the Material 3 TopAppBar is automatically protecting the status bar, which would otherwise be transparent by default.</em></center></imgcaption></image><br /> <p>The system bars are transparent or translucent and content will draw behind by default. Refer to "<a href="https://developer.android.com/develop/ui/views/layout/edge-to-edge#handle-overlaps" target="_blank">Handle overlaps using insets</a>" (Views) or <a href="https://developer.android.com/develop/ui/compose/layouts/insets" target="_blank">Window insets in Compose</a> to see how to prevent important touch targets from being hidden by the system bars.</p> <h3>Smoother NFC experiences - part 2</h3> <p>Android 15 is working to make the tap to pay experience more seamless and reliable while continuing to support Android's robust NFC app ecosystem. In addition to the <a href="https://developer.android.com/reference/android/nfc/NfcAdapter#setObserveModeEnabled%28boolean%29" target="_blank">observe mode</a> changes from Android 15 developer preview 2, apps can now register a fingerprint on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.</p> <h3>Inter-character justification</h3> <p>Starting with Android 15, text can be justified utilizing letter spacing by using <a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_INTER_CHARACTER" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_INTER_CHARACTER</span></a>. Inter-word justification was first introduced in Android O, but inter-character solves for languages that use the white space for segmentation, e.g. Chinese, Japanese, etc.</p> <center><a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_NONE" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_NONE</span></a></center> <image><div style="text-align: center;"><img alt="image shows how japanese kanji (top) and english alphabet characters (bottom) appear with JUSTIFICATION_MODE_NONE" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpGaXOrhGVfwbldBImkvGWLQ_9ziSlMQn7jv0k5DGDWkQyD5uOFfDIcTc9GoUocfUNf_BP9dPFDZToCCmCm7GsBb5wjdj2aTAT575XFJV2yIOitNNf3qqVt11AZwU8gsp8Yd4n7ZHLg5zneOalBYd9_zSLOcJYOHYAVbuBk-piw5algGXe2oz2TVa-cm0/s1600/Screenshot%202024-04-11%20at%2010.53.17%E2%80%AFAM.png" width="400" /></div></image> <center><a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_INTER_WORD" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_INTER_WORD</span></a></center> <image><div style="text-align: center;"><img alt="image shows how japanese kanji (top) and english alphabet characters (bottom) appear with JUSTIFICATION_MODE_INTER_WORD" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPUwmtF2LjxNUP3wjDvest2geZ0_OWMATc9RSl1U7OBIzrlsGJ1-_neEWQZPW0eFQ7DHMv0Y6Or_Vc1XZ8o0CJMilDDGJAsLu27iK1e6FALMPxSs1Pdzg2JoCzmgiJGUaiDzNVs-KBdNBSPTCPmOee10OXPhYWwldAn9sE0MpKaLY-V1dutQ2N7FrwYnA/s1600/Screenshot%202024-04-11%20at%2010.55.15%E2%80%AFAM.png" width="400" /></div></image> <center><a href="https://developer.android.com/reference/android/text/Layout#JUSTIFICATION_MODE_INTER_CHARACTER" target="_blank"><span style="font-family: courier;">JUSTIFICATION_MODE_INTER_CHARACTER</span></a></center> <image><div style="text-align: center;"><img alt="image shows how japanese kanji (top) and english alphabet characters (bottom) appear with JUSTIFICATION_MODE_INTER_WORD" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMiU1AkAp063awk-c6fRqy9GlFiQKgBqTduFrtE5gaHH4WHyMWoHvk1zvr6ruWxdiGUKQhXA8ZAQ6EyBV4-CgO6SvjscpPkMujWFo_q-hWGEGxkisLOJRaQV7VECj2O9ZKoqVOzavrTVqhKfqvjMos1WeGfUb8RVluhpzqKC7mvIcDYXomM6G-TGh6Iz8/s1600/Screenshot%202024-04-11%20at%2010.56.32%E2%80%AFAM.png" width="400" /></div></image> <h3>App archiving</h3> <p><a href="https://android-developers.googleblog.com/2023/04/reduce-uninstalls-for-your-app-with-auto-archive.html" target="_blank">Android and Google Play announced support for app archiving last year</a>, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 now includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.</p> <p>Apps with the <a href="https://developer.android.com/reference/android/Manifest.permission#REQUEST_DELETE_PACKAGES" target="_blank"><span style="font-family: courier;">REQUEST_DELETE_PACKAGES</span></a> permission can call the <a href="https://developer.android.com/reference/android/content/pm/PackageInstaller#requestArchive(java.lang.String,%20android.content.IntentSender)" target="_blank"><span style="font-family: courier;">PackageInstaller requestArchive</span></a> method to request archiving a currently installed app package, which removes the APK and any cached files, but persists user data. Archived apps are returned as displayable apps through the <a href="https://developer.android.com/reference/android/content/pm/LauncherApps" target="_blank"><span style="font-family: courier;">LauncherApps</span></a> APIs; users will see a UI treatment to highlight that those apps are archived. If a user taps on an archived app, the responsible installer will get a request to <a href="https://developer.android.com/reference/android/content/pm/PackageInstaller#requestUnarchive(java.lang.String,%20android.content.IntentSender)" target="_blank">unarchive</a> it, and the restoration process can be monitored by the <a href="https://developer.android.com/reference/android/content/Intent#ACTION_PACKAGE_ADDED" target="_blank"><span style="font-family: courier;">ACTION_PACKAGE_ADDED</span></a> broadcast. </p><h3>App-managed profiling</h3> <p>Android 15 includes the all new <a href="https://developer.android.com/reference/android/os/ProfilingManager" target="_blank"><span style="font-family: courier;">ProfilingManager</span></a> class, which allows you to collect profiling information from within your app. We're planning to wrap this with an Android Jetpack API that will simplify construction of profiling requests, but the core API will allow the collection of heap dumps, heap profiles, stack sampling, and more. It provides a callback to your app with a supplied tag to identify the output file, which is delivered to your app's files directory. The API does rate limiting to minimize the performance impact.</p> <h3>Better Braille</h3> <p>In Android 15, we've made it possible for <a href="https://developer.android.com/guide/topics/ui/accessibility/testing#talkback" target="_blank"><span style="font-family: courier;">TalkBack</span></a> to support Braille displays that are using the HID standard over both USB and secure Bluetooth.</p> <p>This standard, much like the one used by mice and keyboards, will help Android support a wider range of Braille displays over time.</p> <h3>Key management for end-to-end encryption</h3> <p>We are introducing the <a href="https://developer.android.com/reference/android/provider/E2eeContactKeysManager" target="_blank"><span style="font-family: courier;">E2eeContactKeysManager</span></a> in Android 15, which facilitates end-to-end encryption (E2EE) in your Android apps by providing an OS-level API for the storage of cryptographic public keys.</p> <p>The <span style="color: #0d904f; font-family: courier;">E2eeContactKeysManager</span> is designed to integrate with the platform contacts app to give users a centralized way to manage and verify their contacts' public keys.</p> <h3>Secured background activity launches</h3> <p>Android 15 brings additional changes to prevent malicious background apps from bringing other apps to the foreground, elevating their privileges, and abusing user interaction, aiming to protect users from malicious apps and give them more control over their devices. Background activity launches have been restricted since Android 10.</p> <h3>App compatibility</h3> <p>With Android 15 now in beta, we're opening up access to early-adopter users as well as developers, so if you haven't yet tested your app for compatibility with Android 15, now is the time to do it. In the weeks ahead, you can expect more users to try your app on Android 15 and raise issues they find.</p> <p>To test for compatibility, install your published app on a device or emulator running Android 15 beta and work through all of your app's flows. Review the behavior changes to focus your testing. After you've resolved any issues, publish an update as soon as possible.</p> <p>To give you more time to plan for app compatibility work, we’re letting you know our Platform Stability milestone well in advance.</p> <image></image><p></p><div style="text-align: center;"><img alt="Android 15 release timeline" border="0" height="160" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaUR-ASyFMuwI_0asfloIuAwn_sfGnjPsjaffK17u3o9vHOZuqmKNGy-4Gl_9ESAVqT6sEJTEHKB2rb0rEcqC7VvM0nDcYWdbrB__5PKO4QL67RDz5cEJmi5d2-fJol4Nq_0v1KVg_ffIoXMT6rytBRM5hjQJ_8-dmPBKmPWAlwn64h4hP4Tsa9Pcfgx0/s1600/image9.png" width="100%" /></div> <p>At this milestone, we’ll deliver final SDK/NDK APIs and also final internal APIs and app-facing system behaviors. We’re expecting to reach Platform Stability in June 2024, and from that time you’ll have several months before the official release to do your final testing. The release timeline details are <a href="https://developer.android.com/about/versions/15/overview#timeline" target="_blank">here</a>.</p> <h1 style="text-align: left;"><span style="font-size: x-large;">Get started with Android 15</span></h1> <p>Today's beta release has everything you need to try the Android 15 features, test your apps, and give us <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">feedback</a>. Now that we've entered the beta phase, you can <a href="https://www.google.com/android/beta" target="_blank">enroll any supported Pixel device here</a> to get this and future Android Beta updates over-the-air. If you don’t have a Pixel device, you can <a href="https://developer.android.com/about/versions/15/get#on_emulator" target="_blank">use the 64-bit system images with the Android Emulator</a> in Android Studio. If you're already in the <a href="https://developer.android.com/about/versions/14/get-qpr" target="_blank">Android 14 QPR beta program</a> on a supported device, or have installed the developer preview, you'll automatically get updated to Android 15 Beta 1.</p> <blockquote><p>For the best development experience with Android 15, we recommend that you use the <a href="https://developer.android.com/studio/preview" target="_blank">latest version of Android Studio Jellyfish</a> (or more recent Jellyfish+ versions). Once you’re <a href="https://developer.android.com/about/versions/15/setup-sdk" target="_blank">set up</a>, here are some of the things you should do:</p> <ul style="text-align: left;"><ul> <li>Try the new features and APIs - your feedback is critical during the early part of the developer preview and beta program. Report issues in our tracker on the <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">feedback page</a>.</li></ul></ul> <ul style="text-align: left;"><ul><li>Test your current app for compatibility - learn whether your app is affected by changes in Android 15; install your app onto a device or emulator running Android 15 and extensively test it.</li> </ul></ul></blockquote> <p>We’ll update the beta system images and SDK regularly throughout the Android 15 release cycle. Read more <a href="https://developer.android.com/about/versions/15/overview#pixel" target="_blank">here</a>.<br /> </p><p>For complete information, visit the <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a>.</p><br /> <p><em><small>Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.</small></em></p> <p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p> Android android15 Beta Featured latest Android Developers 30 Best Color Tools for Web Designers (2024) https://www.hongkiat.com/blog/best-color-tools-for-web-designers/ hongkiat.com urn:uuid:1655627b-ae3a-875d-197f-674ef11dacb6 Thu, 11 Apr 2024 13:00:44 +0000 <p>Choosing a color theme for your web design project might seem simple at first, but finding the perfect color combinations or creating a color scheme can be tricky, especially if you’re unsure which color tool fits your needs best. To make this easier, here are some of the top color tools for web designers to&#8230;</p> <p>The post <a rel="nofollow" href="https://www.hongkiat.com/blog/best-color-tools-for-web-designers/">30 Best Color Tools for Web Designers (2024)</a> appeared first on <a rel="nofollow" href="https://www.hongkiat.com/blog">Hongkiat</a>.</p> <p>Choosing a color theme for your web design project might seem simple at first, but <strong>finding the perfect color combinations</strong> or <a href="https://www.hongkiat.com/blog/generate-color-schemes-colorpalettes/">creating a color scheme</a> can be tricky, especially if you’re unsure which color tool fits your needs best.</p> <p>To make this easier, here are some of the <strong>top color tools for web designers</strong> to help you pick the best color schemes for your projects. Let’s dive in.</p> <div class="ref-block ref-block--post" id="ref-post-1"> <a href="https://www.hongkiat.com/blog/free-windows-software-for-web-designers-on-budget/" class="ref-block__link" title="Read More: Apps For Web Designers on Budget" rel="bookmark"><span class="screen-reader-text">Apps For Web Designers on Budget</span></a> <div class="ref-block__thumbnail img-thumb img-thumb--jumbo" data-img='{ "src" : "https://assets.hongkiat.com/uploads/thumbs/250x160/free-windows-software-for-web-designers-on-budget.jpg" }'> <noscript> <style>.no-js #ref-block-post-10897 .ref-block__thumbnail { background-image: url("https://assets.hongkiat.com/uploads/thumbs/250x160/free-windows-software-for-web-designers-on-budget.jpg"); }</style> </noscript> </div> <div class="ref-block__summary"> <h4 class="ref-title">Apps For Web Designers on Budget</h4> <p class="ref-description"> Web design can be costly for designers; not only its process is time-consuming, but its tools also involve... <span>Read more</span></p> </div> </div> <h5><a rel="nofollow noopener" target="_blank" href="https://csshero.org/mesher/">Mesher’s Color Gradients</a></h5> <p>Ever thought a simple spacebar press could dramatically enhance your website’s look? Mesher makes it happen, generating random, stunning color gradients effortlessly.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/meshers-color-gradients.jpg" alt="meshers color gradients" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="meshers color gradients" width="1500" height="859" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/meshers-color-gradients.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:57%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://www.khroma.co/">Khroma</a></h5> <p>Imagine an AI that knows your color preferences! With Khroma, after choosing 50 colors you love, it’ll craft palettes just for you, avoiding colors you dislike.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/khroma.jpg" alt="khroma" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="khroma" width="1500" height="818" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/khroma.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:54%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://colors.muz.li/">Muzli Colors</a></h5> <p>Need the perfect palette? Muzli Colors lets you create, edit, and match palettes effortlessly. Dive into UI kits or upload an image to discover its palette.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/muzli-colors.jpg" alt="muzli colors " srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="muzli colors " width="1500" height="859" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/muzli-colors.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:57%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://www.materialpalette.com/">Material Design Palette</a></h5> <p>Pick two colors and watch Material Design Palette do its magic, offering a full palette and shades with hex codes. Available in various formats for download.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/material-design-palette.jpg" alt="material design palette" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="material design palette" width="1500" height="852" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/material-design-palette.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://www.toptal.com/designers/colourcode/">Colourcode’s Palette Builder</a></h5> <p>Find unique color combinations with Colourcode’s intuitive UI. Just move your cursor and adjust with dials for the perfect palette.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colourcode-palette-builder.jpg" alt="colourcode palette builder" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="colourcode palette builder" width="1500" height="823" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colourcode-palette-builder.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:54%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://colorinspire.webflow.io/">Color Inspire</a></h5> <p>Ales Nesetril brings you curated palettes right from his artistic explorations on Instagram. Dive into a world of color for endless inspiration.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/color-inspire.jpg" alt="color inspire" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="color inspire" width="1500" height="774" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/color-inspire.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:51%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://colorable.jxnblk.com/">Colorable</a></h5> <p>Adjust and customize colors to perfection with Colorable. Enter hex codes to check how well your colors match.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colorable.jpg" alt="colorable" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="colorable" width="1500" height="875" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colorable.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:58%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://pigment.shapefactory.co/">Pigment</a></h5> <p>Pigment offers a fresh take on color palettes, focusing on lighting and pigment for those of us who prefer creativity over math.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/pigment.jpg" alt="pigment" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="pigment" width="1500" height="869" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/pigment.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:57%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://147colors.com/">147 Colors</a></h5> <p>Curious about every CSS color? 147 Colors is your go-to, allowing easy browsing, viewing, and filtering to design the perfect palette.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/147colors.jpg" alt="147colors" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="147colors" width="1500" height="844" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/147colors.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://color.adobe.com/create/color-wheel">Adobe Color</a></h5> <p>Formerly known as Adobe Kuler, Adobe Color is among the <strong>most favored features offered by Adobe for <a href="https://www.hongkiat.com/blog/basics-behind-color-theory-for-web-designer/" rel="noopener" target="_blank">mixing colors</a></strong>. It’s a go-to for designers looking to craft the perfect palette.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/kuler.jpg" alt="Adobe Color interface showcasing color wheel and palettes" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Adobe Color interface showcasing color wheel and palettes" width="700" height="426" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/kuler.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:60%;max-width:700px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://www.colourlovers.com/">ColourLovers</a></h5> <p>ColourLovers is a vibrant <strong>community for those passionate about colors</strong>. It’s a treasure trove of images and their color palettes, ready for you to explore and use in your projects.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colour-lovers.jpg" alt="ColourLovers website screenshot with colorful palettes" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="ColourLovers website screenshot with colorful palettes" width="1384" height="792" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colour-lovers.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:57%;max-width:1384px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://coolors.co/">Coolors</a></h5> <p>Coolors is your go-to for <strong>speedy color scheme generation</strong>. It’s incredibly user-friendly, letting you swiftly create and share color palettes. By selecting the main color from images, it <strong>uncovers perfect color matches</strong> for your design.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/coolors.jpg" alt="coolors" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="coolors" width="1500" height="802" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/coolors.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:53%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://colorsnapper.com/">Color Snapper 2</a></h5> <p>Exclusively for Mac users, Color Snapper 2 is a dream tool for graphic designers. It’s crafted to let you <strong>experiment, fine-tune, organize, save, and export colors</strong> directly from your screen with ease.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/color-snapper-2.jpg" alt="Color Snapper 2 application interface" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Color Snapper 2 application interface" width="1000" height="560" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/color-snapper-2.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:56%;max-width:1000px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://color.hailpixel.com/">Colordot</a></h5> <p>Colordot is a <strong>fantastic tool for both web and iOS</strong>, enabling you to effortlessly create and share color schemes. Whether with a tap of your finger or a snapshot from your camera, selecting colors has never been more intuitive.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colordot.jpg" alt="Colordot app interface showing color selection" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Colordot app interface showing color selection" width="700" height="429" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/colordot.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:61%;max-width:700px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://fffuel.co/cccolor/">cccolor</a></h5> <p>For a straightforward and effective color picking experience, cccolor is your tool. Not just a color picker, but also a HEX/RGB/HSL converter, it simplifies finding the ideal colors for your designs. Plus, it offers palettes of tints, shades, and tones based on your selected colors.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/cccolors.jpg" alt="cccolor interface with color selection and palette generation" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="cccolor interface with color selection and palette generation" width="2000" height="1448" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/cccolors.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:72%;max-width:2000px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://www.adobe.com/products/capture.html">Adobe Capture</a></h5> <p>Adobe Capture turns any photo into a <strong>color palette, brush, or pattern</strong> with just a click. Whether you’re on your desktop or on the move with your mobile, it brings your creative ideas to life.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/adobe-capture-cc.jpg" alt="Example of a color palette created with Adobe Capture" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Example of a color palette created with Adobe Capture" width="2375" height="890" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/adobe-capture-cc.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:37%;max-width:2375px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://colors.lol/">LOL Colors</a></h5> <p>Curated by Mackenzie Child, LOL Colors offers a palette of inspiration with <strong>clickable colorful teardrops and ready-to-copy hex codes</strong>. It’s a playground of color for designers looking for the perfect match.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/LOL-colors.jpg" alt="LOL colors " srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="LOL colors " width="1500" height="1109" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/LOL-colors.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:73%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://cssgradient.io/">Gradients.io</a></h5> <p>Gradients.io is perfect for those who love <strong>gradient fills</strong>. With a collection of squares in various color palettes, complete with hex codes, it makes choosing and using gradients a breeze.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/gradients-io.jpg" alt="Sample gradients from Gradients.io" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Sample gradients from Gradients.io" width="700" height="433" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/gradients-io.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:61%;max-width:700px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="http://colorhunter.com/">Color Hunter</a></h5> <p>Find an image you love, upload it to Color Hunter, and watch as it <strong>crafts a color palette inspired by your image</strong>. It’s an invaluable tool for designers seeking color inspiration from their favorite visuals.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/color-hunter.jpg" alt="Color palette generated by Color Hunter" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Color palette generated by Color Hunter" width="700" height="544" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/color-hunter.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:77%;max-width:700px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://labs.tineye.com/multicolr/">TinEye</a></h5> <p>With TinEye, dive into a sea of over 20 million Creative Commons images from Flickr and <strong>extract the colors you need</strong>. Adjust the dividers, add tags, and find the perfect color for your project.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/TinEye.jpg" alt="TinEye" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="TinEye" width="1500" height="1193" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/TinEye.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:79%;max-width:1500px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="https://paletton.com/#uid=1000u0kllllaFw0g0qFqFg0w0aF">Paletton</a></h5> <p>Paletton is designed for graphic designers aiming to <strong>create websites with harmonious color combinations</strong>. Explore pre-made palettes or craft your own, ensuring your site stands out in just the right way.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/paletton.jpg" alt="Paletton tool showing color scheme options" srcset="" sizes=""></noscript><img loading="lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Paletton tool showing color scheme options" width="700" height="437" data-lazy-src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/paletton.jpg"><span class="img-ratio-placeholder__fill" style="padding-bottom:62%;max-width:700px"></span></span></figure> <h5><a rel="nofollow noopener" target="_blank" href="http://colorexplorer.com/">Color Explorer</a></h5> <p>Color Explorer takes color analysis to the next level. This comprehensive tool allows you to <strong>create, analyze, and fine-tune your color schemes</strong> with ease—and it’s completely free.</p> <figure class="border-solid-1" data-lazy=""><span class="img-ratio-placeholder"><noscript><IMG src="https://assets.hongkiat.com/uploads/best-color-tools-for-web-designers/color-explorer.jpg" alt="Color Explorer interface showcasing color scheme analysis" srcset="" sizes=""></noscript><i Toolkit Color Tools Web Designers Hongkiat Lim Google Drive cut code and development time in half with Jetpack Compose and new architecture http://android-developers.googleblog.com/2024/04/google-drive-cut-code-and-development-time-in-half-with-jetpack-compose-and-new-architecture.html Android Developers Blog urn:uuid:7c37ff91-b1e6-1592-4a3c-455971a8e889 Wed, 10 Apr 2024 15:05:18 +0000 <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif"> <em>Posted by Nick Butcher – Product Manager for Jetpack Compose, and Florina Muntenescu – Developer Relations Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif" imageanchor="1" ><img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-uWcB7FULeHyYVbosbQYPomkmCS1D1r4GJVTxaFMMa3zsQIEi3YS03p6gXAoELZkraqKgTFwCnIosIC8OTqD0WUdWRHt69lngvhEAA0GhRHdWX37zeK_rbRXt_JC1RuRG35U_zizzTi3HwqkA5rvhJ_W0VPuRLCSraAVokMt7dNXIf551oJ-XNy1biWA/s1600/image1.gif" data-original-width="100%" data-original-height="800" /></a> <div><br/></div> <p>As one of the world’s most popular cloud-based storage services, <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.docs" target="_blank">Google Drive</a> lets people do more than just store their files online. With Drive, users can synchronize, share, search, edit, and even pin specified files and content for safe and secure offline use.</p> <p>Recently, Drive’s developers revamped the application’s home screen to provide a more seamless experience across devices, matching updates made to Google Drive’s web version. However, the app’s previous architecture and codebase would’ve prevented the team from completing the updates in a timely manner.</p> <p>Instead of struggling with the app’s previous tech stack to implement the update, the Drive team rebuilt the home page from the ground up using <a href="https://developer.android.com/topic/architecture" target="_blank">Android’s recommended architecture</a> and <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>, Android’s modern declarative toolkit for creating native UI.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Compose, combined with architecture improvements, cut our development time nearly in half.” — Dale Hawkins, Senior software engineer and tech lead at Google Drive" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS4qFn0SqV1ivDmkeSrJ0DnJ7ZiC7-BRbbRpt8dG_7hMlnePyrGHqrDpGfyDcuc2kUFFBW3bXoIkMDJORpCZRSmChzJvyXFsSTqAgQBRbmS3vmv8swahygqFHbOxe6B0bHVp2vt_4wv-On0DWH5_lx8g2XNfsW35uBZJAdcuitrK4mPEIklljC3xFPVhg/s1600/image3.png" width="100%"/></div></image> <h3>Experimenting with Kotlin and Compose</h3> <p>The Drive team experimented with Kotlin — which the Compose toolkit is built with — for several months before planning the app’s home screen rebuild. Drive’s developers liked Kotlin’s improved syntax and null enforcement, making it easier to produce code.</p> <p>“We had been using RxJava, but started looking into replacing that with coroutines,” said Dale Hawkins, the features team lead for Google Drive. “This led to a more natural alignment between coroutines and Jetpack Compose. After a deep dive into Compose, we came away with a clear understanding of how Compose has numerous benefits over the Views-based approach.”</p> <p>Following the Kotlin exploration, Dale experimented with Jetpack Compose. “I was pleased with how easy it was to build the UI using Compose. So I continued the experiment after that week,” said Dale. “I eventually rewrote the feature using Compose.”</p> <h3>Using Compose</h3> <p>Shortly after experimenting with Jetpack Compose, the Drive team decided to use it to completely rebuild the app’s home screen UI.</p> <p>“We wanted to make some major changes to match the ones being done for the web version, but that project had a several-month head start. We wanted to release the Android version shortly after the web changes went live to ensure our users have a seamless Google Drive experience across devices,” said Dale.</p> <p>The Drive team's experimentation and testing with Jetpack Compose showed that the new toolkit was powerful and reliable and that it would enable them to move faster. With this in mind, the Drive team decided to step away from their old codebase and embrace Jetpack Compose for the app’s home screen update. Not only would it be quicker and easier, but it would also better prepare the team to easily make future UI changes.</p> <h3>Using Android’s guidance for architecture </h3> <p>Before going all-in with Jetpack Compose, Drive developers wanted to restructure the application by implementing a completely new app architecture. Drive developers followed Android’s <a href="https://developer.android.com/topic/architecture" target="_blank">official architecture guidance</a> to apply structural changes, paving the way for the new Kotlin codebase.</p> <p>“The recommended architecture reinforces good separation between layers,” said Quintin Knudsen, an Android engineer for Google Drive. “We work in a highly dynamic environment and need to be able to adjust to any app changes. Using well-defined and independent layers helps isolate any changes or UI requirements. The recommendations from Android offered sound ways to structure the layers.” With a clear separation between the app’s data and UI layers, developers could work in parallel to significantly speed up testing and development.</p> <p>Drive developers also relied on Mappers and UseCases when creating the new architecture. These patterns allowed them to create flexible code that is easier to manage. They also exposed flows from their <span style=font-family:Courier><a href="https://developer.android.com/topic/libraries/architecture/viewmodel" target="_blank">ViewModels</a></span> to make the UI respond immediately to any data changes, making it much simpler to implement and understand UI updates.</p> <h3>Less code, faster development</h3> <p>With the app’s newly improved architecture and Jetpack Compose, <b>the Drive team was able to develop the app’s new home screen in less than half the time that they expected</b>. They also implemented the new code and finished quality assurance testing nearly seven weeks ahead of schedule.</p> <p>“Thanks to Compose, we had the groundwork done within a couple of weeks. We delivered a great implementation over a month ahead of schedule, and it’s been praised by product, UX, and even other engineering teams,” said Dale.</p> <p>Despite having fewer features, the original home screen required over 12,000 lines of code. <b>The new Compose-based home screen has many new features and only required 5,100 lines of code—a 57% reduction.</b> Having less code makes it much easier for developers to maintain the app and implement any updates.</p> <p>Testing the new UI in Jetpack Compose also required significantly less code. Before Compose, Drive developers used roughly 9,000 lines of code to test about 62% of the UI. With Compose, <b>it took only 2,200 lines to test over 80% of the new UI</b>.</p> <image><div style="text-align: center;"><img id="imgFull" alt="The original home screen required over 12,000 lines of code. The Compose-based home screen only required 5,100 lines of code. That’s a 57% reduction.” — Dale Hawkins, Senior software engineer and tech lead at Google Drive" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGeBVd0e9EdcuRlhWOCykigdqNb8ZYaM2TCm1WXzxalR3iIurNkm-qUrizGbzz-eCPepTrK_R7vuPcR2LgEuSKwBzeKQTOQh8XIZ1cz40Dn7JaEpQww9aAG1bxws-5h-tTvY7xTWNqv-Xq-Xnz2RprGOvk7D0GG58yUIsYw6PnMRjJoUKOZxFRdeHMTrc/s1600/image2.png" width="100%"/></div></image> <h3>Looking forward</h3> <p>A new and improved app architecture paired with Jetpack Compose allowed Drive developers to rebuild the app’s home screen UI faster and easier than they could’ve imagined. The Drive team plans to expand its use of Compose within the application for things like supporting large dynamic displays and text resizing.</p> <p>“As we work on new projects, we’re taking the opportunity to update older UI code to make use of our new architecture and Compose. The new code will be objectively better and features will be easier to write, test, and maintain,” said Dale.</p> <iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="Q_pM2SsV5n0" width="100%" height="415" src="https://www.youtube.com/embed/Q_pM2SsV5n0"></iframe> <h3>Get started</h3> <p>Improve app architecture using Android’s <a href="https://developer.android.com/topic/architecture" target="_blank">official architecture guidance</a> and optimize your UI development with <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>.</p> Android Architecture case study Google Drive Jetpack Compose Solve Android Developers Android Studio uses Gemini Pro to make Android development faster and easier http://android-developers.googleblog.com/2024/04/android-studio-uses-gemini-pro.html Android Developers Blog urn:uuid:76128670-fc03-c660-f44d-0e58b849d6a6 Mon, 08 Apr 2024 17:00:48 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif" style="display: none;" /> <em>Posted by Sandhya Mohan – Product Manager, Android Studio</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0q33r2-Na0bQSva4BtrsJqL_7-iHwY0Q3aBrnWBQad_ZFnK0m6WLnydyKAoqyvEEdkRNHfsHX_5sDg_idBjQ_bfzpwApKuk7AC10GEXNRTXnCWJQheLOH3JLRzc1E_HGtgVgV7kcDsE4YchfNukzcXEmBXOQ1kmEs2sirBsSQxmmuOK107MXvwSUsXo/s1600/image5.gif" /></a> <p>As part of the next chapter of our Gemini era, we announced <a href="https://blog.google/technology/ai/google-gemini-update-sundar-pichai-2024/" target="_blank">we were bringing Gemini to more products</a>. Today we’re excited to announce that Android Studio is using the Gemini 1.0 Pro model to make Android development faster and easier, and we’ve seen significant improvements in response quality over the last several months through our internal testing. In addition, we are making this transition more apparent by announcing that Studio Bot is now called <i>Gemini in Android Studio</i>.</p> <p>Gemini in Android Studio is an AI-powered coding assistant which can be accessed directly in the IDE. It can accelerate your ability to develop high-quality Android apps faster by helping generate code for your app, providing complex code completions, answering your questions, finding relevant resources, adding code comments and more — all without ever having to leave Android Studio. It is available in <a href="http://d.android.com/studio/preview/gemini/availability" target="_blank">180+ countries and territories</a> in <a href="https://developer.android.com/studio" target="_blank">Android Studio Jellyfish</a>.</p> <p>If you were already using Studio Bot in the canary channel, you’ll continue experiencing the same helpful and powerful features, but you’ll notice improved quality in responses compared to earlier versions.</p> <h3>Ask Gemini your Android development questions</h3> <p>Gemini in Android Studio can understand natural language, so you can ask development questions in your own words. You can enter your questions in the chat window ranging from very simple and open-ended ones to specific problems that you need help with.</p> <p>Here are some examples of the types of queries it can answer:</p> <blockquote> <ul style="text-align: left;"><ul><li>How do I add camera support to my app?</li></ul></ul> <ul style="text-align: left;"><ul><li>Using Compose, I need a login screen with the following: a username field, a password field, a 'Sign In' button, a 'Forgot Password?' link. I want the password field to obscure the input.</li></ul></ul> <ul style="text-align: left;"><ul><li>What's the best way to get location on Android?</li></ul></ul> <ul style="text-align: left;"><ul><li>I have an 'orders' table with columns like 'order_id', 'customer_id', 'product_id', 'price', and 'order_date'. Can you help me write a query that calculates the average order value per customer over the last month?</li></ul></ul> </blockquote> <image><div style="text-align: center;"><img alt="Moving image demonstrating a conversation in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjas_FhKHTqxu3dKMT9m-Ub1IS4Qd1EemhoLGWEqWfetRUppLQ88zCpnSPjBq_8GwI2wRlEV-MoCFdZP7t9Ms4e7vizrWf346tvEZHQXeGaYExRRHCW0focMDRecKtd9kPUdVm1wv1B1K7aVat1WXerNenUBlD-9lzLu9AeO0iFzvlMPPxvHepIlQDzJfE/s1600/1-GIF_04042024.gif" width="100%" /></div></image><br /> <p>Gemini in Android Studio remembers the context of the conversation, so you can also ask follow-up questions, such as “Can you give me the code for this in Kotlin?” or “Can you show me how to do it in Compose?”</p> <h3>Code faster with AI powered Code Completions</h3> <p>Gemini in Android Studio can help you be more productive by providing you with powerful <a href="http://d.android.com/studio/preview/gemini/ai-code-completion" target="_blank">AI code completions</a>. You can receive suggestions of multi-line code completions, suggestions for how to do comments for your code, or how to add documentation to your code.</p> <image><div style="text-align: center;"><img alt="Moving image demonstrating code completion in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiisvK5mtxRYsCvtWDYHiNlKA6ScxSpIvgdgeyjw6tfUvZGR1WINjBQGuPpLiSaPOwkF0-9nMbr1MSURjWE3FNYzSxEk9Mz7UI1HFbhz2i9zCBiSGvcsPrS64y_i400cnx0fYpOEBe2p1GyZd8OzQkX9I4Ycm0gGVBb1gayyPSix9g5r12DqkZv9nymhg8/s1600/image3.gif" width="100%" /></div></image><br /> <h3>Designed with privacy in mind</h3> <p>Gemini in Android Studio was designed with privacy in mind. Gemini is only available after you log in and enable it. You don’t need to send your code context to take advantage of most features. By default, Gemini in Android Studio’s chat responses are purely based on conversation history, and you control whether you want to share additional context for customized responses. You can update this anytime in Android Studio &gt; Settings at a granular project level. We also have a custom way for you to opt out certain files and folders through an <span style="color: #0d904f; font-family: Courier;">.aiexclude</span> file. Much like our work on other AI projects, we stick to a set of AI Principles that hold us accountable. Learn more <a href="http://d.android.com/studio/preview/gemini/data-and-privacy" target="_blank">here</a>.</p> <image><div style="text-align: center;"><img alt="image of share settings in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYGyWIyJUcl5bnt9uFxMr7rej55PkB0M3zk3ihtRySejr60s9PxCC_CZjKfIepetNUBaPF4oNBCBUzFalgCn5DoEstjVyKBwunVMfiY__VvJT-VQKg08TyXP94B-_iAxdV44KGFvg5Dmj_boj-dbIW6-MVkwBuPFL37uWTGQ-54XL71Zol7h-dABWdSw/s1600/image1.png" width="100%" /></div></image><br /> <h3>Build a Generative AI app using the Gemini API starter template</h3> <p>Not only does Android Studio use Gemini to help you be more productive, it can also help you take advantage of Gemini models to create AI-powered features in your applications. Get started in minutes using the Gemini API starter template available in the <a href="https://developer.android.com/studio/preview" target="_blank">canary</a> release – channel for Android Studio – under <b>File &gt; New Project &gt; Gemini API Starter</b>. You can also use the code sample available at <b>File &gt; Import Sample &gt; Google Generative AI sample</b>.</p> <p>The Gemini API is multimodal, meaning it can support image and text inputs. For example, it can support conversational chat, summarization, translation, caption generation etc. using both text and image inputs.</p> <image><div style="text-align: center;"><img alt="image of starter templates in Android Studio" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW2Ey-wzHms_nQerYAweFOQprNaSxq2d5VGgtZCiVrogFgVzh8hD-jkgn2qgvRXCm1HOE7EgqMyRwCzeQSFqxEBzhH3B0ZvRZL1EbI_jU2cElLbZupV2m_5hEChEw5oaD5nAr9ffrt9TgOqZMEVJFMHsPCELQzc9eG-djHLG9yeBzzRAmyaVXNXGe81CM/s1600/image2.png" width="100%" /></div></image><br /> <h3>Try Gemini in Android Studio</h3> <p>Gemini in Android Studio is still in preview, but we have added many feature improvements — and now a major model update — since we released the experience in May 2023. It is currently no-cost for developers to try out. Now is a great time to test it and let us know what you think, before we release this experience to stable. </p><br /> <p><em>Stay updated on the latest by following us on <a href="https://www.linkedin.com/showcase/androiddev/posts/?feedView=all" target="_blank">LinkedIn</a>, <a href="https://medium.com/androiddevelopers" target="_blank">Medium</a>, <a href="https://www.youtube.com/c/AndroidDevelopers/videos" target="_blank">YouTube</a>, or <a href="https://twitter.com/androidstudio" target="_blank">X</a>. Let's build the future of Android apps together!</em></p> #GenerativeAI AI Android Studio Explore Gemini How-To Guide Android Developers Battling Impersonation Scams: Monzo’s Innovative Approach http://android-developers.googleblog.com/2024/03/battling-impersonation-scams-monzo-innovative-approach.html Android Developers Blog urn:uuid:946b2665-b190-3f1e-6fdc-9e361ee1206c Fri, 29 Mar 2024 16:00:00 +0000 <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9RdxcjxL3U0FED0xkLkqoaR-kRYYPKhVSJJjBdyeaRoMO0PbguHKu3xP0NqItQujnU5lWdTlXlUu4aMK-SYZZ4DtZNc2tvpr-Qr67rUseUat43Q3ZTEA711xg-cknJUK2HHNiqVcAVit4jTxKrFFqe7cmzsI6A-sAbj1mbLY-dvK0WdL1Lb1vD4nrivI/s1600/new-social.png"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9RdxcjxL3U0FED0xkLkqoaR-kRYYPKhVSJJjBdyeaRoMO0PbguHKu3xP0NqItQujnU5lWdTlXlUu4aMK-SYZZ4DtZNc2tvpr-Qr67rUseUat43Q3ZTEA711xg-cknJUK2HHNiqVcAVit4jTxKrFFqe7cmzsI6A-sAbj1mbLY-dvK0WdL1Lb1vD4nrivI/s1600/new-social.png"> <em>Posted by Todd Burner – Developer Relations Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1fi1qTWTJC_RmEL7ytOhAklf204fm9nF8128Qo56AvzCKsD1TrJUSh47x_Jr-OyDe5ihxWVWFVpa1z0m_8b9XbNOl_h-xPC6ZluNWxmbJ93NVViKDTtWAjZHPEdwjWg62mBD5srdDRbzcBXMPjHFt4aP8opdt0TJ0K-dr-shkGmcdko0IqfTDWLvfuxY/s1600/Monzo-Blog-Banner.png" imageanchor="1" ><img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1fi1qTWTJC_RmEL7ytOhAklf204fm9nF8128Qo56AvzCKsD1TrJUSh47x_Jr-OyDe5ihxWVWFVpa1z0m_8b9XbNOl_h-xPC6ZluNWxmbJ93NVViKDTtWAjZHPEdwjWg62mBD5srdDRbzcBXMPjHFt4aP8opdt0TJ0K-dr-shkGmcdko0IqfTDWLvfuxY/s1600/Monzo-Blog-Banner.png" data-original-width="100%" data-original-height="800" /></a> <p>Cybercriminals continue to invest in advanced financial fraud scams, costing consumers more than $1 trillion in losses. According to the 2023 <a href="https://www.newswire.com/news/global-losses-to-scammers-exceed-1-trillion-as-1-in-4-lose-money-to-22145725" target="_blank">Global State of Scams Report by the Global Anti-Scam Alliance</a>, 78 percent of mobile users surveyed experienced at least one scam in the last year. Of those surveyed, 45 percent said they’re experiencing more scams in the last 12 months.</p> <image><div style="text-align: center;"><img id="imgFull" alt="ALT TEXT" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8o87R6eoIO7ByjEL9QSZ85PAFYn1k-Q9rHwFF4K_uJ8g8T_AzJ9SIrm3x0Ltix_m2BWEBPHkJ7KmV5B7jp78cUb0_hbgKTBCW8m1w0NbtlFnx9RmJDCAbm-piJNoTrq8Dc16qpmkb6LCRSIuPJcEmFRJzQ5CVbcP3Txz75zTMIBcfsNYEnEvIeF2YmRo/s1600/image4.png" width="100%"/></div></image><br/> <p>The Global Scam Report also found that phone calls are the top method to initiate a scam. Scammers frequently employ social engineering tactics to deceive mobile users.</p> <p>The key place these scammers want individuals to take action are in the tools that give access to their money. This means financial services are frequently targeted. As cybercriminals push forward with more scams, and their reach extends globally, it’s important to innovate in the response.</p> <p>One such innovator is Monzo, who have been able to tackle scam calls through a unique impersonation detection feature in their app.</p> <h3>Monzo’s Innovative Approach</h3> <p>Founded in 2015, Monzo is the largest digital bank in the UK with presence in the US as well. Their mission is to make money work for everyone with an ambition to become the one app customers turn to to manage their entire financial lives.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Monzo logo" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisTk0iOUitj4Dz0yVGcyAlEub9LD5t1bAkDnRHbDXZRA0RayjMQuG8UFfhhqFx8C-tdyhIGBt2TS4gsEv_5TRHG-SBkdfwFvZAJTeeMd4DeOFNzOnSj95uUBcYZ9T9XJJlFEz_Lq42W_Cf326id3J5OI-CA-fYxeNnaPPb_oWkMY_f5kt-S2UNF2F6ThA/s1600/image1.png" width="100%"/></div></image><br/> <p><a href="https://www.ukfinance.org.uk/news-and-insight/press-release/new-figures-show-ps1776m-was-lost-impersonation-scams-in-2022-take" target="_blank">Impersonation fraud</a> is an issue that the entire industry is grappling with and Monzo decided to take action and introduce an industry-first tool. An impersonation scam is a very common social engineering tactic when a criminal pretends to be someone else so they can encourage you to send them money. These scams often involve using urgent pretenses that involve a risk to a user’s finances or an opportunity for quick wealth. With this pressure, fraudsters convince users to disable security safeguards and ignore proactive warnings for potential malware, scams, and phishing.</p> <h3>Call Status Feature</h3> <p>Android offers multiple layers of spam and phishing protection for users including call ID and spam protection in the Phone by Google app. Monzo’s team wanted to enhance that protection by leveraging their in-house telephone systems. By integrating with their mobile application infrastructure they could help their customers confirm in real time when they’re actually talking to a member of Monzo’s customer support team in a privacy preserving way.</p> <p>If someone calls a Monzo customer stating they are from the bank, their users can go into the app to verify this. In the Monzo app’s Privacy & Security section, users can see the ‘Monzo Call Status’, letting them know if there is an active call ongoing with an actual Monzo team member.</p> <blockquote><span style="font-size: large;"><i>“We’ve built this industry-first feature using our world-class tech to provide an additional layer of comfort and security. Our hope is that this could stop instances of impersonation scams for Monzo customers from happening in the first place and impacting customers.”&nbsp;</i></span><p></p><p><b>- Priyesh Patel, Senior Staff Engineer, Monzo’s Security team</b></p></blockquote> <h3>Keeping Customers Informed</h3> <p>If a user is not talking to a member of Monzo’s customer support team they will see that as well as some helpful information. If the ‘Monzo call status’ is showing that you are not speaking to Monzo, the call status feature tells you to hang up right away and report it to their team. Their customers can start a scam report directly from the call status feature in the app.</p> <image><div style="text-align: center;"><img id="imgFull" alt="screen grab of Monzo call status alerting the customer that the call the customer is receiving is not coming from Monzo. The customer is being advised to end the call" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguZ0FD_nFvmFYqzppPhAKQQsXPpQDJBulWGoJAByC2fTitYF-hzxeZMZVwsnc9esbx598xMs_A46i4ckxnuJQu1PrgQASceph0G6Vt8nCb4AS_YfaVl8tdzBUDFLAiajfLjxWv9m9-JDCJisUFVfD3toIqWTxC237vsVUn6Kd8yNfMmXpW4O06PHgbCkw/s1600/image2.png" width="100%"/></div></image><br/> <p>If a genuine call is ongoing the customer will see the information.</p> <image><div style="text-align: center;"><img id="imgFull" alt="screen grab of Monzo call status confirming to the customer that the call the customer is receiving is coming from Monzo." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimvppUPkI9ZDKYFinQq37kughoC-5ZuWyGDZWeM_HjyAH0Wr-LQinwdKKKFLuGOwStMR0uYQrAP4V-UXUbqB784bZ9HL3TI0iq-TP_VHoFk3hnoloVK-0chyphenhyphenkOX8LVtB_y_PaIHU-koaIgEOoWOvmidr2_zdzO6ytkP3xk4dxMGx6HjuI98Qp1LxiuDR4/s1600/image6.png" width="100%"/></div></image><br/> <h3>How does it work?</h3> <p>Monzo has integrated a few systems together to help inform their customers. A cross functional team was put together to build a solution.</p> <p>Monzo’s in-house technology stack meant that the systems that power their app and customer service phone calls can easily communicate with one another. This allowed them to link the two and share details of customer service calls with their app, accurately and in real-time.</p> <p>The team then worked to identify edge cases, like when the user is offline. In this situation Monzo recommends that customers don’t speak to anyone claiming they’re from Monzo until you’re connected to the internet again and can check the call status within the app. </p> <image><div style="text-align: center;"><img id="imgFull" alt="screen grab of Monzo call status displaying warning while the customer is offline letting the customer know the app is unable to verify whether or not the call is coming from Monzo, so it is safer not to answer." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitZzpe5y3du_onQYb4IcS-85yEG_7v1WOTXom6C0xIMCvxxNaXi0EUw0ZrhZAv-LWVZTt7o9daFvl8wDOeHYWR0VwYVWFFAWLYfzmNSSqHgcgT7gsCENdT1s6KW4QNN7alLVhEzVO7MgsTKIH_XGc3XTUkzcr3_SLnqF4urVreq3D9rfmFGjiM83fnaAk/s1600/image5.png" width="100%"/></div></image><br/> <h3>Results and Next Steps</h3> <p>The feature has proven highly effective in safeguarding customers, and received universal praise from industry experts and consumer champions.</p> <blockquote><span style="font-size: large;"><i>“Since we launched Call Status, we receive an average of around 700 reports of suspected fraud from our customers through the feature per month. Now that it’s live and helping protect customers, we’re always looking for ways to improve Call Status - like making it more visible and easier to find if you’re on a call and you want to quickly check that who you’re speaking to is who they say they are.”&nbsp;</i></span><p></p><p><b>- Priyesh Patel, Senior Staff Engineer, Monzo’s Security team</b></p></blockquote> <h3>Final Advice</h3> <p>Monzo continues to invest and innovate in fraud prevention. The call status feature brings together both technological innovation and customer education to achieve its success, and gives their customers a way to catch scammers in action. </p> <p>A layered security approach is a great way to protect users. Android and Google Play provide layers like app sandboxing, Google Play Protect, and privacy preserving permissions, and Monzo has built an additional one in a privacy-preserving way.</p> <p>To learn more about Android and Play’s protections and to further protect your app check out these resources:</p> <ul><ul> <li><a href="https://developer.android.com/quality/privacy-and-security" target="_blank">Improve your app’s security</a></li> <li><a href="https://developer.android.com/google/play/integrity/overview" target="_blank">Adopt Play Integrity API</a></li> </ul></ul> beginner Best Practices mobile Mobile App Development Privacy Security Android Developers #WeArePlay | Meet the founders changing women's lives: Women’s History Month Stories http://android-developers.googleblog.com/2024/03/weareplay-meet-founders-changing-womens-lives-womens-history-month-stories.html Android Developers Blog urn:uuid:7eaf7fbc-766c-506f-426a-b0e70a1bd9d9 Mon, 25 Mar 2024 17:11:20 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" style="display: none;" /> <em>Posted by Leticia Lago – Developer Marketing</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png" /></a> <p>In celebration of Women’s History month, we’re celebrating the founders behind groundbreaking apps and games from around the world - made by women or for women. Let's discover four of my favorites in this latest batch of nine <a href="https://play.google.com/console/about/weareplay/" target="_blank"> #WeArePlay stories</a>.</p><br /> <h3>Múkami Kinoti Kimotho</h3> <p><b><span style="font-size: large;">Royelles Revolution / Royelles Revolution: Gaming For Girls (USA)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Múkami Kinoti Kimotho – Royelles Revolution / Royelles- Gaming For Girls | USA" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6tkNfmiNsZsaazg8OG_nEt1TzHHIAnkk3Ei10Q3vVRBI3dGWVxbo6JaEFPa9i0-GWqMTN30cR_f4256XplS9Rg1bxiN0EZlnJDoObwozARkeXzVXUBu_KTzG7SIWar4AmE-f-tW53iWwmxadNECFw2vKS5YUH7c6GqAPrEg-QFcwWEXSytVbQV5-lgSM/w493-h640/USA_Social_DevPromo_Royelles%20Revolution.png" width="493" /></a></div></image> <div style="text-align: left;"><br /></div><p>Múkami's journey began when she noticed the lack of representation for girls in the gaming industry. Determined to change this narrative, she created Royelles, a game designed to inspire girls and non-binary people to pursue careers in STEAM (science, technology, engineering, art, math) fields. The game is anchored in fierce female avatars like the real life NASA scientist Mara who voices a character. Royelles is revolutionizing the gaming landscape and empowering the next generation of innovators. Múkami's excited to release more gamified stories and learning modules, and a range of extended reality and AI-powered avatars based on the game’s characters.</p> <blockquote><span style="font-size: large;"><i>"If we're going to effectively educate Gen Z and Gen Alpha, we have to meet them in the metaverse and leverage gamified play as a means of driving education, awareness, inspiration and empowerment.”&nbsp;</i></span><p></p><p><b>- Múkami</b></p></blockquote> <h3>Leonika Sari Njoto Boedioetomo</h3> <p><b><span style="font-size: large;">Reblood: Blood Services App (Indonesia)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Leonika Sari Njoto Boedioetomo – Reblood / Blood Services App | Indonesia" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvpDipNC-zeuqm2yBxJArUkPR0O95HlJRys3c0fnZY6NubA8ATU4RMvJLv83so53CR8G-QTRm6hwo-PmdJQcJOcN-J1FPP9MoUUnTkecGIG-dGdW0GkcrSki5OdL6BHASi1CvDJY8J0Z2H14SY8lxZPU9RpPvnCAuu3CjCkdvPrAtUAexGvj0rxkcIx98/s1600/INDONESIA_Social_DevPromo_Reblood.png" width="493" /></a></div></image> <div style="text-align: left;"><br /></div><p>When her university friend needed an urgent blood transfusion but discovered there was none available in the blood bank, Leonika became aware of the blood donation shortage in Indonesia. Her mission to address this led her to create Reblood, an app connecting blood donors with those in need. With over 140,000 blood donations facilitated to date, Reblood is not only saving lives but also promoting healthier lifestyles with a recently added feature that allows people to find the most affordable medical checkups.</p> <blockquote><span style="font-size: large;"><i>“Our goal is to save more lives by raising awareness of blood donation in Indonesia and promoting healthier lifestyles for blood donors.”&nbsp;</i></span><p></p><p><b>- Leonika</b></p></blockquote> <h3>Luciane Antunes dos Santos and Renato Hélio Rauber</h3> <p><b><span style="font-size: large;">CARSUL / Car Sul: Urban Mobility App (Brazil)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Luciane Antunes dos Santos and Renato Hélio Rauber – Car Sul: Urban Mobility App | Brazil" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnSt2Xg4U9FyFqT9Rt3kR5NjA5yDl_1jazXEdimKT_hbpVTyL4daJTqgKals76c8vGE7-IxaHbPM8ikA60NY4WCvKUi8XFO_813cKx8g1W41o2d9QIUukQVk9_Ohk5jyrJYxSxIvfLyThm8CW_KlyNomkt9cWBGghqeGDiGk37rL4ocuA_A5n40S8Hd7U/s1600/BRAZIL_Social_DevPromo_Carsul.png" width="493" /></a></div></image> <div style="text-align: left;"><br /></div><p>Luciane was devastated when she lost her son in a car accident. Her and her husband Renato's loss led them to develop Carsul, an urban mobility app prioritizing safety and security. By providing safe transportation options and partnering with government health programs to chauffeur patients long distances to larger hospitals, Carsul is not only preventing accidents but also saving lives. Luciane and Renato's dedication to protecting others from the pain they've experienced is ongoing and they plan to expand to more cities in Brazil.</p> <blockquote><span style="font-size: large;"><i>“Carsul was born from this story of loss, inspiring me to protect other lives. Redefining myself in this way is very rewarding.”&nbsp;</i></span><p></p><p><b>- Luciane</b></p></blockquote> <h3>Diariata (Diata) N'Diaye</h3> <p><b><span style="font-size: large;">Resonantes / App-Elles: Safety App for Women (France)</span></b></p> <image><div style="text-align: center;"><a href="https://play.google.com/console/about/weareplay/" target="_blank"><img alt="Diariata (Diata) N'Diaye – Resonantes /App-Elles: Safety App for Women | France" border="0" height="640" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi03vRYfkRIMtV2BRZZiZbgpxn6DVS-d-TK0Mulenb-IKQ871Vh55WjNdI5tWbRrO3KFRP2OF2Y1JUMXD0gN9x7Ic8THxom2hhwcggSxsPhjTt-deCWtkoJnsRxC-zeqQIPDf8oXD_MXy5UgTkR3Tjz5GubWK8vhCUXcgDn5a1_ahj6wc4J6dOxah99ET8/s1600/FRANCE_Social_DevPromo_Resonantes.png" width="493" /></a></div></image><span style="font-size: large;"> </span><div style="text-align: left;"><br /></div><p>After hearing the stories of young people who had experienced abuse that was similar to her own, Spoken word artist Diata developed App-Elles – an app that allows women to send alerts when they're in danger. By connecting users with support networks and professional services, App-Elles is empowering women to reclaim their safety and seek help when needed.Diata also runs writing and recording workshops to help victims overcome their experiences with violence and has plans to expand her app with the introduction of a discreet wearable that sends out alerts.</p> <blockquote><span style="font-size: large;"><i>“I realized from my work on the ground that there were victims of violence who needed help and support systems. This was my inspiration to create App-Elles."&nbsp;</i></span><p></p><p><b>- Diata</b></p></blockquote><br/> <p>Discover more <a href="https://play.google.com/console/about/weareplay/" target="_blank">#WeArePlay stories</a> and share your favorites.</p> <br /><br /> <p></p><center> How useful did you find this blog post? </center><p></p> <p></p><center> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> </center><p></p> <div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /></a></div> #WeArePlay android developers app development developer stories Featured Game Development Google Play google play developers success stories Android Developers The Second Developer Preview of Android 15 http://android-developers.googleblog.com/2024/03/the-second-developer-preview-of-android-15.html Android Developers Blog urn:uuid:23e9a2c4-1f49-ec9a-087f-2e03b5ed95aa Thu, 21 Mar 2024 18:22:53 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1UxJk2BEGQu-9eSLY0fV6wrCb0FJTo_-rMykFO0wUDajMwXeF7CgXx9MBKZcOLhd5bOikhbK9PWvM3aYfncnDn_Lba0ASuchSeKbpt4ZWcmcEHDK8_W6-_C2DnWs3T7v1DPk2EtTAH_amWewikG5f9NDadQSJ6DbcwiTKEG0XtlO_f250KaNRz76Jcg/s1600/AD-15-Developer-Preview.png" style="display: none;" /> <em> Posted by <a href="https://twitter.com/davey_burke" target="_blank">Dave Burke</a>, VP of Engineering </em> <div class="separator" style="border: 0px; clear: both; float: right; padding: 0px; width: 45%;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Android 14 logo" border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" width="320" /></a></div> <p><br /></p><p>Today marks the second chapter of the Android 15 story with the release of Android 15 Developer Preview 2!</p> <p>Android 15 continues our work to build a platform that helps improve your productivity while giving you new capabilities to produce <a href="http://d.android.com/media" target="_blank">superior media</a> and <a href="https://developer.android.com/ml/aicore" target="_blank">AI experiences</a>, take advantage of device form factors, <a href="https://developer.android.com/develop/background-work/background-tasks" target="_blank">minimize battery impact</a>, <a href="https://developer.android.com/topic/performance/baselineprofiles/overview" target="_blank">maximize smooth app performance</a>, and <a href="https://developer.android.com/privacy-and-security/about" target="_blank">protect user privacy and security</a>, all on the most diverse lineup of devices out there.</p> <p>Android continues to add features enabling your apps to take advantage of premium device hardware, including the latest telecommunications features, high-end media capabilities, dazzling displays, foldable/filppable form factors, and AI processing.</p> <p>Your feedback on the Android 15 Developer Preview and Beta program plays a key role in helping Android continuously improve. The <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a> has more information about the preview, including downloads for Pixel and detailed documentation about changes. This preview is just the beginning, and we’ll have lots more to share as we move through the release cycle. Thank you in advance for your help in making Android a platform that works for everyone.</p> <h3 style="text-align: left;"><span style="font-size: x-large;">Updating Android communications</span></h3> <p>Android 15 updates the platform to give your app access to the latest advances in communication.</p> <h4 style="text-align: left;"><span style="font-size: large;">Satellite support</span></h4> <p>Android 15 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.</p> <image><div style="text-align: center;"><img alt="screen schot of a mobile Android device showing notification when device connects to satellite" border="0" height="400" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhYamLzA7BrwXPi87If8wLEFGN_Nij6N4hpox0P1jRBvRQYXyuimQFhSCqw9Krbjp55WQK8tqVycR4Gr901oL5ocas-19FkIfmr7F-wH-Dqsr1kDrTpNrc9EOP2cWpiC9h-qkfVl_-b3iqIr7m_4V3Tju-REVpCh1jjSSfipvuTaRrxN39PGhF119EYZw/w398-h400/image9.png" width="398" /></div><imgcaption><center><em>Notification when device connects to satellite</em></center></imgcaption></image> <p>Apps can use <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/telephony/ServiceState?#isUsingNonTerrestrialNetwork%28%29" target="_blank">ServiceState.isUsingNonTerrestrialNetwork()</a></span> to detect when a device is connected to a satellite, giving them more awareness of why full network services may be unavailable. Additionally, Android 15 provides support for SMS/ MMS applications as well as preloaded RCS applications to use satellite connectivity for sending and receiving messages.</p> <h4 style="text-align: left;"><span style="font-size: large;">Smoother NFC experiences</span></h4> <p>Android 15 is working to make the tap to pay experience more seamless and reliable while continuing to support Android's robust NFC app ecosystem. On supported devices, apps can request the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/nfc/NfcAdapter" target="_blank">NfcAdapter</a></span> enter <a href="https://developer.android.com/reference/android/nfc/NfcAdapter#setObserveModeEnabled%28boolean%29" target="_blank">observe mode</a>, where the device will listen but not respond to NFC readers, sending the app's NFC service <span style="color: #0d904f; font-family: Courier;">PollingFrame</span> objects to process. The <span style="color: #0d904f; font-family: Courier;"><a href="https://develpoer.android.com/reference/android/nfc/cardemulation/HostApduService#processPollingFrames%28java.util.List%3Candroid.nfc.cardemulation.PollingFrame%3E%29" target="_blank">PollingFrame</a></span> objects</p> can be used to auth ahead of the first communication to the NFC reader, allowing for a one tap transaction in many cases. <h3 style="text-align: left;"><span style="font-size: x-large;">Developer productivity</span></h3> <p>While most of our work to improve your productivity centers around tools like <a href="https://developer.android.com/studio" target="_blank">Android Studio</a>, <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>, and the <a href="https://developer.android.com/jetpack" target="_blank">Android Jetpack</a> libraries, we always look for ways in the platform to help you more easily realize your vision.</p> <h4 style="text-align: left;"><span style="font-size: large;">PDF Improvements</span></h4> <image><div style="text-align: center;"><img alt="screen schot of a mobile Android device showing search enabled for PDF files" border="0" height="400" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh36mJzos5LY2bD15mJlcRj-VfIQZB07DKp5IywaEyMINjFjgh7a1czQRjd5-ivyLb2dVEo3mZEOkLNA2jk7HUDquzUQeC4yx-lkaQcpk09M5BLkq4aIdJguK7DL3N_aypEWpfUAqHqealv_TMqzEPZQW6GY8qO-X5CXrN-jjLgf09GsVVBS7j1KvbOGnM/s1600/image3.png" width="398" /></div><imgcaption><center><em>Enable searching embedded PDF files with updates to <span style="color: #0d904f; font-family: Courier;">PdfRenderer</span></em></center></imgcaption></image><br/> <p>Android 15 Developer Preview 2 includes an early preview of substantial improvements to the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/graphics/pdf/PdfRenderer" target="_blank">PdfRenderer APIs</a></span>, giving apps capabilities to incorporate advanced features such as rendering <a href="https://developer.android.com/reference/android/graphics/pdf/LoadParams" target="_blank">password-protected files</a>, annotations, <a href="https://developer.android.com/reference/android/graphics/pdf/models/FormEditRecord" target="_blank">form editing</a>, <a href="https://develpoer.android.com/reference/android/graphics/pdf/PdfRenderer.Page#searchText%28java.lang.String%29" target="_blank">searching</a>, and <a href="https://developer.android.com/reference/android/graphics/pdf/PdfRenderer.Page#selectContent%28android.graphics.pdf.models.selection.SelectionBoundary,%20android.graphics.pdf.models.selection.SelectionBoundary,%20boolean%29" target="_blank">selection</a> with copy. Linearized PDF optimizations are supported to speed local PDF viewing and reduce resource use.</p> <p>The PdfRenderer has been moved to a module that can be updated using Google Play system updates independent of the platform release, and we're supporting these changes back to Android R by creating a compatible pre-Android 15 version of the API surface, called <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/graphics/pdf/PdfRendererPreV" target="_blank">PdfRendererPreV</a></span>.</p> <p>We value your feedback on the enhancements we've made to the PdfRenderer API surface, and we plan to make it much easier to incorporate these APIs into your app with an upcoming Android Jetpack library. Stay tuned.</p> <h4 style="text-align: left;"><span style="font-size: large;">Automatic language switching refinements</span></h4> <p>Android 14 added on-device multi-language audio recognition with automatic switching between languages, but this can cause words to get dropped, especially when languages switch with less of a pause between the two utterances. Android 15 has added additional controls to allow apps to help tune this switching for their use case. <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/RecognizerIntent#EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS" target="_blank">EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS</a></span> confines the automatic switching to the beginning of the audio session, while <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/RecognizerIntent#EXTRA_LANGUAGE_SWITCH_MAX_SWITCHES" target="_blank">EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES</a></span> deactivates the language switching after a defined number of switches. This can be a useful refinement, particularly if the expectation is that there will be a single language spoken during the session that should be autodetected.</p> <h4 style="text-align: left;"><span style="font-size: large;">Granular line break controls</span></h4> <p>Starting in Android 15, the <a href="https://developer.android.com/reference/android/widget/TextView" target="_blank">TextView</a> and the underlying line breaker can preserve the given portion of text in the same line to improve readability. You can take advantage of this line break customization by using the &lt;nobreak&gt; tag in string resources or <a href="https://developer.android.com/reference/android/text/style/LineBreakConfigSpan#createNoBreakSpan%28%29" target="_blank">createNoBreakSpan</a>. Similarly, you can preserve words from hyphenation by using the &lt;nohyphen&gt; tag or <a href="https://developer.android.com/reference/android/text/style/LineBreakConfigSpan#createNoHyphenationSpan%28%29" target="_blank">createNoHyphenationSpan</a>.</p> <p>Examples and screenshots:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">&lt;resources&gt; &lt;string name=<span style="color: #ba2121;">"pixel8pro"</span>&gt;The power and brains behind Pixel <span style="color: #666666;">8</span> Pro.&lt;/string&gt; &lt;/resources&gt;</span> </pre></div> <image><div style="text-align: center;"><img alt="text reads: The power and brains behind Pixel 8 Pro." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgar54Zl0G5tyzWAkSOoO40W7DF1VZ1npSpmEFQ2LzqX96AGqFApCocUnpx6BulUMjGN8tlObI5PgXieBOXki89MND6oJ5zNxDCjrsVUoMZheLNQrKP6xly2AgCRxQG7EZS6tbmab-5OZ0YpeCLw2NfFGnAEyCiRxn5fPqoec-M3AVIMQLpKjqTGPvPRcg/s16000/image5.png" /></div></image> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">&lt;resources&gt; &lt;string name=<span style="color: #ba2121;">"pixel8pro"</span>&gt;The power and brains behind &lt;nobreak&gt;Pixel <span style="color: #666666;">8</span> Pro.&lt;/nobreak&gt;&lt;/string&gt; &lt;/resources&gt;</span> </pre></div> <image><div style="text-align: center;"><img alt="text reads: The power and brains behind Pixel 8 Pro." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZdUj8c4odSyWPBtt9_wbS9i94WuLjKrNFeFcUQgnwrYYNoIYsj698QrucdZEmweynlGBMd8KjbjY_sfGKXU1gNznGtitKzaCVObhBqzkJJFP46vgDIrCMYu9nXdmW3WAC5kWl4_4GAftwc_QkRLl8kFBcd2Dy1AKt5U1FQ4X21bO0FwbebNDO3gvmMak/s16000/image4.png" /></div></image> <h4 style="text-align: left;"><span style="font-size: large;">Expanded IntentFilter Functionality</span></h4> <p>Android 15 builds-in support for more precise Intent resolution through <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/content/UriRelativeFilterGroup" target="_blank">UriRelativeFilterGroup</a></span>, which contain a set of <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/content/UriRelativeFilter" target="_blank">UriRelativeFilter</a></span> objects that form a set of Intent matching rules that must each be satisfied, including URL query parameters, URL fragments, and blocking/exclusion rules. This helps applications better keep up with the dynamic demands of web-hosted deep links.</p> <p>These rules can be defined in the <span style="color: #0d904f; font-family: courier;">AndroidManifest</span> with the new &lt;uri-relative-filter-group&gt; tag which can optionally include an <span style="color: #0d904f; font-family: Courier;">android:allow&nbsp;</span>tag. These tags can contain <data> tags that use existing data tag attributes as well as the <span style="color: #0d904f; font-family: Courier;">new android:query</span> and <span style="color: #0d904f; font-family: Courier;">android:fragment</span> attributes.</data></p> <p>An example of the <span style="color: #0d904f; font-family: courier;">AndroidManifest</span> syntax that will be supported:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">&lt;intent-filter&gt; &lt;action android:name=<span style="color: #ba2121;">"android.intent.action.VIEW"</span> /&gt; &lt;category android:name=<span style="color: #ba2121;">"android.intent.category.BROWSABLE"</span> /&gt; &lt;data android:scheme=<span style="color: #ba2121;">"http"</span> /&gt; &lt;data android:scheme=<span style="color: #ba2121;">"https"</span> /&gt; &lt;data android:domain=<span style="color: #ba2121;">"astore.com"</span> /&gt; &lt;uri-relative-filter-group&gt; &lt;data android:pathPrefix=<span style="color: #ba2121;">"/auth"</span> /&gt; &lt;data android:query=<span style="color: #ba2121;">"region=na"</span> /&gt; &lt;/uri-relative-filter-group&gt; &lt;uri-relative-filter-group android:allow=<span style="color: #ba2121;">"false"</span>&gt; &lt;data android:pathPrefix=<span style="color: #ba2121;">"/auth"</span> /&gt; &lt;data android:query=<span style="color: #ba2121;">"mobileoptout=true"</span> /&gt; &lt;/uri-relative-filter-group&gt; &lt;uri-relative-filter-group android:allow=<span style="color: #ba2121;">"false"</span>&gt; &lt;data android:pathPrefix=<span style="color: #ba2121;">"/auth"</span> /&gt; &lt;data android:fragmentPrefix=<span style="color: #ba2121;">"faq"</span> /&gt; &lt;/uri-relative-filter-group&gt; &lt;/intent-filter&gt;</span> </pre></div> <h4 style="text-align: left;"><span style="font-size: large;">More OpenJDK API support</span></h4> <p>Android 15 continues to add OpenJDK APIs. Developer Preview 2 includes support for additional <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/java.lang.Math" target="_blank">math</a>/<a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/java.lang.StrictMath" target="_blank">strictmath</a> methods, lots of <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/pkg_java.util" target="_blank">util updates</a> including sequenced <a href="https://developer.android.com/reference/java/util/SequencedCollection" target="_blank">collection</a>/<a href="https://developer.android.com/reference/java/util/SequencedMap" target="_blank">map</a>/<a href="https://developer.android.com/reference/java/util/SequencedSet" target="_blank">set</a>, <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/java.util.zip.Deflater" target="_blank">ByteBuffer support in Deflater</a>, and <a href="https://developer.android.com/sdk/api_diff/v-dp2-incr/changes/pkg_java.security.spec" target="_blank">security key updates</a>. These APIs are updated on <a href="https://android-developers.googleblog.com/2023/11/the-secret-to-androids-improved-memory-latest-android-runtime-update.html" target="_blank">over a billion devices running Android 12+ through Android 15 through Google Play System updates</a> so you can target the latest programming features.</p> <h3 style="text-align: left;"><span style="font-size: x-large;">Giving your app more flexibility on more screens</span></h3> <p>Android 15 gives your apps the support to get the most out of Android's form factors, including large screens, flippables, and foldables.</p> <h4 style="text-align: left;"><span style="font-size: large;">Cover screen support</span></h4> <p>Your app can <a href="https://developer.android.com/reference/android/view/WindowManager#COMPAT_SMALL_COVER_SCREEN_OPT_IN" target="_blank">declare a property</a> that Android 15 uses to allow your Application or Activity to be presented on the small cover screens of supported flippable devices. These screens are too small to be considered as compatible targets for Android apps to run on, but your app can opt-in to supporting them, making your app available in more places.</p> <h3 style="text-align: left;"><span style="font-size: x-large;">A more private, secure Android</span></h3> <p>We're always looking to give users more transparency and control over their data while enhancing the core security features of the platform.</p> <h4 style="text-align: left;"><span style="font-size: large;">Screen record detection</span></h4> <p>Android 15 adds <a href="https://developer.android.com/reference/android/view/WindowManager?hl=en#addScreenRecordingCallback%28java.util.concurrent.Executor,%20java.util.function.Consumer%3Cjava.lang.Integer%3E%29" target="_blank">support for apps</a> to detect that they are being recorded. A callback is invoked whenever the app transitions between being visible or invisible within a screen recording. (An app is considered visible if activities owned by the registering process's UID are being recorded.) This way, if your app is performing a sensitive operation, you can inform the user that they're being recorded.</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;"><span style="color: green; font-weight: bold;">val</span> mCallback = Consumer&lt;Int&gt; { state -&gt; <span style="color: green; font-weight: bold;">if</span> (state == SCREEN_RECORDING_STATE_VISIBLE) { <span style="color: #408080; font-style: italic;">// we're being recorded</span> } <span style="color: green; font-weight: bold;">else</span> { <span style="color: #408080; font-style: italic;">// we’re not being recorded</span> } } <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">onStart</span>() { super.onStart() <span style="color: green; font-weight: bold;">val</span> initialState = windowManager.addScreenRecordingCallback(mainExecutor, mCallback) mCallback.accept(initialState) } <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">onStop</span>() { super.onStop() windowManager.removeScreenRecordingCallback(mCallback) }</span> </pre></div> <h3 style="text-align: left;"><span style="font-size: x-large;">Making Android more efficient</span></h3> <p>We are introducing new APIs that can help you gather insights about your apps, continuing to optimize the way background applications work, and providing APIs to help make tasks in your app more efficient to execute.</p> <h4 style="text-align: left;"><span style="font-size: large;">ApplicationStartInfo API</span></h4> <p>App startup on Android has always been a bit of a mystery. There was no easy way to know within your app whether it started from a cold, warm, or hot state. It was difficult to know how long your app spent during the various launch phases: forking the process, calling onCreate, drawing the first frame, and more. When your application class was instantiated, you had no way of knowing whether the app started from a broa Android 15 developerpreview Explore Featured latest Release Notes Android Developers Tune in for Google I/O on May 14 http://android-developers.googleblog.com/2024/03/google-io-24-save-the-date.html Android Developers Blog urn:uuid:8c2dcaac-fcb2-628b-952b-8b018b242ded Thu, 14 Mar 2024 20:12:37 +0000 <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxqoLGBufRoqc2ZEiGobjzE3A2atge74sLY_IgV4OICzMzqGu2bIbNgTUFHnc5ra8ah-xmFynqiNRR2gIarzCc34K40DTrfbT-CEN3wiBIiW8M_yVoAMKTJqb2X82jQSqTa9L6fgNruk-wFjij_Iao9Gv3BdxCzsitrMj-MEDbSLd6kufQk7UhT3p6Z0k/s1600/IO-24-Profile-Social-AD.png"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxqoLGBufRoqc2ZEiGobjzE3A2atge74sLY_IgV4OICzMzqGu2bIbNgTUFHnc5ra8ah-xmFynqiNRR2gIarzCc34K40DTrfbT-CEN3wiBIiW8M_yVoAMKTJqb2X82jQSqTa9L6fgNruk-wFjij_Iao9Gv3BdxCzsitrMj-MEDbSLd6kufQk7UhT3p6Z0k/s1600/IO-24-Profile-Social-AD.png"> <em>Posted by Jeanine Banks – VP &amp; General Manager, Developer X, and Head of Developer Relations</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGiGRCsR-i1iR8gorL9E_IKpJdXH6mVW9PV8eZmjzvkj9FffXZj8QAaesPXqocINIxEELPHzDJHmhCxsRDYoU_lXoshHzHJqK7ICgq2gQGb5rqnUK9LsIovAnmmkYDh0iMw7r6JV8QjxPsTANUzUWyt5ZqvOgodiNxUFTOfNIvm6-_wqgj8cK8U7smdOY/s1600/IO24_SVD%20Blog%20Banner%2001_4209%E2%80%8A%C3%97%E2%80%8A1253.png" imageanchor="1" ><img style="100%" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGiGRCsR-i1iR8gorL9E_IKpJdXH6mVW9PV8eZmjzvkj9FffXZj8QAaesPXqocINIxEELPHzDJHmhCxsRDYoU_lXoshHzHJqK7ICgq2gQGb5rqnUK9LsIovAnmmkYDh0iMw7r6JV8QjxPsTANUzUWyt5ZqvOgodiNxUFTOfNIvm6-_wqgj8cK8U7smdOY/s1600/IO24_SVD%20Blog%20Banner%2001_4209%E2%80%8A%C3%97%E2%80%8A1253.png" data-original-width="1058" data-original-height="800" /></a> <p><a href="https://io.google/2024/?utm_source=blogpost&amp;utm_medium=pr&amp;utm_campaign=svd-gfd&amp;utm_content=" target="_blank">Google I/O</a> is arriving this year on May 14th and you’re invited to join us online! I/O offers something for everyone, whether you are developing a new application, modernizing an existing one, or transforming it into a business.</p> <p>The Gemini era unlocks new possibilities for developers to build creative and productive AI-enabled applications. I/O is where you’ll hear how you can get from idea to production AI applications faster. We’re excited to share what’s new for mobile, web, and multiplatform development, and how to scale your applications in the cloud. You will be able to dive deeper into topics that interest you with over 100 sessions, workshops, codelabs, and demos.</p> <p>Visit the <a href="https://io.google/2024/?utm_source=blogpost&amp;utm_medium=pr&amp;utm_campaign=svd-gfd&amp;utm_content=" target="_blank">Google I/O</a> site and register to stay informed about I/O and other related events coming soon. The livestreamed keynotes start May 14 at 10am PT, so mark your calendar.</p> <p>If you haven’t already, go try out our newest <a href="https://io.google/2024/puzzle/?utm_source=blogpost&amp;utm_medium=pr&amp;utm_campaign=svd-gfd&amp;utm_content=" target="_blank">Google I/O puzzle</a> and head to <a href="https://www.instagram.com/googlefordevs/" target="_blank">@googlefordevs on Instagram</a> if you need a hint.</p> android developers DAC/Develop DAC/google Featured Android Developers Meet the class of 2024 for Google Play’s Indie Games Accelerator http://android-developers.googleblog.com/2024/03/meet-class-of-2024-for-google-play-indie-games-accelerator.html Android Developers Blog urn:uuid:17b828ac-abaf-5c15-1a2c-fd268cd0b050 Thu, 14 Mar 2024 12:38:33 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif" style="display: none;" /> <em>Posted by Leticia Lago – Developer Marketing</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfVTaPiCaraBuzzW_aJxpR7XnYwNbWI5LGOb-wBIlGx5wVa_y3qcxtvlK6-llvEocV-pOWtmds72i4DWdykXuROMnjcNbRwgjOq6t0c-fLSgp1fF3SBWMwQM_9XTAeKgNhE2gEsvQjX3k23lOmd5Iwa0HK3P5h4w_T8ilxJZcgMLHOfGFwb6y3O961nl8/s1600/image1.gif" /></a> <p>Today, we’re excited to reveal <a href="https://rsvp.withgoogle.com/events/indies-games-accelerator-2024/" target="_blank"><b>Google Play’s Indie Games Accelerator</b></a> class of 2024.</p> <p>Selected game studios from around the world will take part in the 10-week accelerator designed to take their businesses to the next level on Google Play. The program includes:</p> <ul><ul> <li>A series of online masterclasses, talks and gaming workshops hosted by industry leaders</li> <li>Mentorship sessions covering a broad variety of topics including technical development, gameplay and team leadership</li> <li>Access to gaming experts from Google and leading studios</li> </ul></ul> <p>Due to the number of impressive applications, we’ve doubled this year’s class size from 30 to 60 studios. Without further ado, meet the class of 2024 and join us in congratulating them!</p> <image><div style="text-align: center;"><img alt="moving image of IGA winners class 2024" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ5xdK7N85wZVDQ-wQ2QzCye-20Pm1ZgvSdozXqSrK9ivomMF_U2FYXfK1KlYti92ERBocG3IoWMIfzFUjhyx8SWgB9K-_WUyn_pfhmeGShT71CtP6R-uKnseQhyphenhyphenE5ukdDlzbAFK1_qtYDIDwuhLhpmBTofS5nMDJHgBBhAVYKreMpxfVGbSUI5PIpzXY/s1600/IGA-Inline-Square.gif" width="75%" /></div></image><br /> <table style="border-collapse: collapse; border: none;"><colgroup><col width="210"></col><col width="208"></col><col width="226"></col></colgroup><tbody><tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><span style="font-size: small;"><b>Americas </b><br /><br />Logisk Studio<br />Attu<br />Sprocket Games<br />Blu Studios <br />Highpoint Games<br />D20 Studios<br />Supernova Games<br />Cafund</span>ó<span style="font-size: small;">&nbsp;Creative Studio<br />Hyperthought Games Inc.<br />North Star Digital Studios<br />Theia Studios<br />Aurecas Games<br />Mana Burn<br />67 Bits<br />Retora Games<br />Ocarina Studios<br />WonderLegend Games<br />EiP Game Studio</span></td> <td style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><span style="font-size: small;"><b>Asia Pacific<br /></b><br />CLOVER-FI Games<br />Crimzen Red Studios<br />QueseraGames Co., Ltd.<br />Gonggamore Contents Inc.<br />ONDOT INC<br />LiberalDust<br />Studio Boxcat<br />Whoyaho Corp.<br />Blackhammer<br />Algorocks<br />Own Games&nbsp;<br />Kudos Games<br />Appspace Solutions<br />Lentera Nusantara<br />Dunali Games<br />Hexpion<br />Dreams Studio<br />Panthera Studio<br />Lunarite Studio<br />Npckc<br />ONDI Games<br />Playdew<br />Niku Games Studio<br />Avian Hearts Studios Pvt. Ltd<br />WASD Interactive<br /></span></td> <td style="border-bottom: solid #000000 1pt; border-color: rgb(0, 0, 0); border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-style: solid; border-top: solid #000000 1pt; border-width: 1pt; overflow-wrap: break-word; overflow: hidden; padding: 5pt; vertical-align: top;"><span style="font-size: small;"><b>Europe, Middle East &amp; Africa<br /></b><br />First Pick Studios<br />Pank0<br />Big Loop Studios<br />BaldrickSoft<br />RPG games<br />Airapport<br />Post Physical<br />WALKME MOBILE SOLUTIONS<br />Iteration One<br />Veryo Studios<br />Monster League<br />TERAHYPE<br />3Hills<br/>Gravity Code<br />Torpor Games<br />Nordic Stone Studio<br />TruePlayers<br />Pineapple on Pizza Studios<br /></span></td></tr></tbody></table> <p>Congratulations again to all the founders selected; we can’t wait to see your games grow on our platform.</p> <p> We’re committed to helping app and game businesses of all sizes reach their full potential. <a href="https://play.google.com/console/about/programs/indiegames/" target="_blank">Discover more</a> about Google Play’s programs, resources and tools for indie games developers.</p> android developers Featured Game Development Google Play Google Play Indie games accelerator indie developers Indie Games Indie Games Accelerator Android Developers Key product updates from the 2024 Google for Games Developer Summit http://android-developers.googleblog.com/2024/03/key-product-updates-from-2024-google-for-games-developer-summit.html Android Developers Blog urn:uuid:8c610f03-e05f-d946-3add-8f4f28635398 Tue, 12 Mar 2024 16:00:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrGpBeUkUN6KAkglqR0AZd4-Qfvt0glXWMXBWrgBJQGazGH78JtSyNRGy8UpUSqcwaSKykhidO1p3jx7ebvmjaDcas-NHb-ti_FdcjODWjlML_mBQ5M2mbwTIz66YgPCdQ9__vPDbnd1QEpxThz-8U97tYmD8AdClYb3szCSorpNaViDo18lhFpMSSdqY/s1600/GGDS-Keynote-24.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrGpBeUkUN6KAkglqR0AZd4-Qfvt0glXWMXBWrgBJQGazGH78JtSyNRGy8UpUSqcwaSKykhidO1p3jx7ebvmjaDcas-NHb-ti_FdcjODWjlML_mBQ5M2mbwTIz66YgPCdQ9__vPDbnd1QEpxThz-8U97tYmD8AdClYb3szCSorpNaViDo18lhFpMSSdqY/s1600/GGDS-Keynote-24.png" style="display: none;" /> <em>Posted by Aurash Mahbod – General Manager, Games on Google Play</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEAOFsHnnWtKy84l0Uo6JIO1m7YN_Wkgm5mJr6lRx8ZPhaNHAtFvl-b2dA7izOztETWY1Z1Zn-EC__tQ4DaUJoqFTw53j08QNboV03flNnwVu5FIJhK-Ru2YZCHsVC0HIFM8huyO2v7JfwTwZCMB2OMF7D1WZJBP74b7dOhX5DGOEoy08ctPtsT6gL5SU/s1600/GGDS%20Android%20Blog%20Post%20Main%20Image%20%28%20Asset%201%20%29%20%28%204209%20x%201253px%20%29.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEAOFsHnnWtKy84l0Uo6JIO1m7YN_Wkgm5mJr6lRx8ZPhaNHAtFvl-b2dA7izOztETWY1Z1Zn-EC__tQ4DaUJoqFTw53j08QNboV03flNnwVu5FIJhK-Ru2YZCHsVC0HIFM8huyO2v7JfwTwZCMB2OMF7D1WZJBP74b7dOhX5DGOEoy08ctPtsT6gL5SU/s1600/GGDS%20Android%20Blog%20Post%20Main%20Image%20%28%20Asset%201%20%29%20%28%204209%20x%201253px%20%29.png" /></a> <p>We’re on a mission to make Google Play the best destination for gaming, and your amazing games are what make it possible. That’s why we’re investing in tools that empower you to achieve more by increasing user engagement, accelerating your business growth, and maximizing your reach.</p> <p>Today, we shared more details about those investments at the <a href="https://gamedevsummit.withgoogle.com/" target="_blank">Google for Games Developer Summit</a>. Check out the <a href="https://gamedevsummit.withgoogle.com/events/ggds-keynote-2024" target="_blank">Keynote session on demand</a>, or keep reading for key product updates from the summit.</p> <h3>More ways to increase user engagement</h3> <p>We know that identity, progress, and achievements are important to gamers. With <a href="https://developer.android.com/games/pgs/overview" target="_blank">Play Games Services</a> (PGS), gamers can switch between devices and jump back into gameplay instantly, on any device connected with PGS<sup>1</sup>. Based on your feedback, we’ve made it easier for you to integrate PGS and provide more relevant experiences for your users:</p> <ul style="text-align: left;"><ul> <li>No database changes are required to integrate PGS, and you no longer need to store the association between in-game accounts and PGS profiles.</li></ul></ul><ul style="text-align: left;"><ul> <li>You can start automatically syncing your users’ sign in information via PGS, including those without a profile, ensuring their progress is available to be synced when they change to a new device<sup>2</sup>.</li></ul></ul><ul style="text-align: left;"><ul> <li>Throughout this year, we’re rolling out more ways for you to create engaging in-game content by achievement level or game progress. For example, you will be able to create Quests within your game to challenge players while unlocking rewards using Play Points.</li> </ul></ul> <p>To start creating these engaging experiences within your game, <a href="https://developer.android.com/games/pgs/overview" target="_blank">integrate PGS today</a> — and stay tuned for more capabilities coming soon.</p> <p>We’ve also been working to tailor our store experience to better engage users who’ve already installed your game. Starting today, we’re rolling out <b>enhancements to store listings</b> to more prominently display your game updates, new content, and promotions directly within Play<sup>3</sup>. Your store listing page will source relevant content to keep your audience engaged with your game, including your latest YouTube videos, AI-generated FAQs, and more.</p> <p>These improvements are currently limited to English language users and to select titles that are part of the early access program. If you’re interested in testing the enhanced store listing for your game and helping shape this feature with your feedback, you can <a href="https://docs.google.com/forms/d/e/1FAIpQLSdw0PjDz1AvNK8CVH5JsyMBf5qh0EQZEpRsGed-GxBnLxNmFg/viewform" target="_blank">express interest here</a>.</p> <image><div style="text-align: center;"><img alt="moving image of Games Hub (left) and Games Home (right)" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWbPWBqKAtdEgV4QvoUJE3yL7XCgA8SqSJ51pJTo6KoZbblKHeJv3jwxe52o36FN3m9sEmgK3T7ZvxgE2dXE9MIXAPhlSfflKKLNMeABk1RownU04kcP7r3ldvVeIvdMcbW3h_JW9lA0eCC1xADEsQ90rhuxXWs6yhdcxbYW-olCbY0_H04IyYabwGNnQ/s1600/GIF_2_GamesHub_and_GamesHome_white%20%281%29.gif" width="100%" /></div></image> <h3>Expanded programs to accelerate growth</h3> <p>We’re also expanding our most popular programs to help you accelerate your business growth.</p> <ul style="text-align: left;"><ul> <li>With over 220M members, Google Play Points is one of the largest loyalty programs in the world. Available in over 35 markets and covering the vast majority of purchase-ready, active spenders, Play Points helps you retain users and reach new ones. This year, we’re excited to announce that we’ll be <b>launching Google Play Points in Brazil</b>.</li></ul></ul><ul style="text-align: left;"><ul> <li>Play Points now offers the ability to <b>set limited quantities for exclusive in-game offers</b>, building excitement and boosting participation around limited deals. These offers have been highly effective at reaching paying users and driving repeat purchases.</li></ul></ul> <image><div style="text-align: center;"><img alt="image" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY_obu2GJGjR0yW5YZ64P5s_-E3KGVhuEFJdPxPtwNSukytd1RlqQU4_3w3msLW9mSn1698Z2rFAv5rUHYWA3_if40IZn1_tkYJNPJpk-HydUGD0u_pM4p6wNApgBEPy5gOGDQMG8dkTo9_4-mKOs_BOy7k8LpmvwqM58J1JnJSrCEUiIH_UPRHezI8vs/s1600/GGDS%20Android%20Blog%20Post%20Asset%202%20%281%29.png" width="100%" /></div></image> <ul style="text-align: left;"><ul> <li>Google Play Pass, which has grown over 120% in subscriptions over the past year, is expanding to include in-game offers from popular games. We’re launching in-game offers in 21 markets including Japan, and <b>launching Play Pass in Korea later this year</b>.</li></ul></ul><ul style="text-align: left;"><ul> <li>Some of the world’s largest mobile games such as <a href="https://play.google.com/store/apps/details?id=com.ea.gp.fifamobile&amp;hl=en_US&amp;gl=US" target="_blank">EA SPORTS FC™ Mobile</a>, <a href="https://play.google.com/store/apps/details?id=com.mobile.legends&amp;hl=en_US&amp;gl=US" target="_blank">Mobile Legends: Bang Bang</a>, <a href="https://play.google.com/store/apps/details?id=com.scopely.monopolygo&amp;hl=en_US&amp;gl=US" target="_blank">MONOPOLY GO!</a> and <a href="https://play.google.com/store/apps/details?id=com.roblox.client&amp;hl=en_US&amp;gl=US" target="_blank">Roblox</a> use Play Pass to reach and engage new buyers, with the majority of users spending more than the offer amount provided by Play Pass<sup>4</sup>.</li> </ul></ul> <image><div style="text-align: center;"><img alt="moving image of Google Games play pass" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL30nQR62_lLi6gqGwUNQTX6YACYLCFuHkYqujV30A9XWhKlqtPN_du6Lwtt1_wlpKlLGt8Xoje2S1q_h6EIzDm0zDxpGC47UNCWQg814QxlqMNFqwOJvnYc583QtyrxadMBqEeHUReJnbTLAJemv9YnjtAX6lZ169E-sye_ze_3cVCKzrr5R1sY9IxWU/s1600/GIF_1_Play%20Pass%20%28dark%20mode%29%20white.gif" width="100%" /></div></image><br /> <h3>New ways to maximize reach</h3> <p>Finally, to help you reach more users with your games, we’re making it easier to scale and grow your multi-platform games across mobile, tablets, Chromebooks, and Windows PCs<sup>5</sup>.</p> <ul><ul> <li>As of today, Google Play Games on PC includes over 3,000 titles in over 140 countries, with developers seeing up to 35% more playtime<sup>6</sup>. This year, we’re adding <b>support for native PC game publishing</b>. Popular PC games such as <a href="https://play.google.com/store/apps/details?id=com.ncsoft.lineage2mnu&amp;hl=en_US&amp;gl=US" target="_blank">Lineage2M</a>, <a href="https://play.google.com/store/apps/details?id=com.kakaogames.odin&amp;hl=en_US&amp;gl=US" target="_blank">Odin: Valhalla Rising</a>, <a href="https://play.google.com/store/apps/details?id=com.miHoYo.GenshinImpact&amp;hl=en_GB" target="_blank">Genshin Impact</a>, and <a href="https://play.google.com/store/apps/details?id=com.sgra.dragon&amp;hl=en_US&amp;gl=US" target="_blank">Dragonheir: Silent Gods</a> are already available with <a href="https://sololeveling.netmarble.com/en" target="_blank">Solo Leveling: Arise</a> coming soon this year. If you have native PC games and are looking to expand to a global audience of gamers, please <a href="https://docs.google.com/forms/d/e/1FAIpQLSe5xWN_i70u_--3nSUCeahEhwbJyGHVDkZSB3FGAxB7B5MMRQ/viewform?usp=header_link" target="_blank">express interest here</a>.</li></ul></ul> <image><div style="text-align: center;"><img alt="ALT TEXT" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-GkHwMj8PgKaMGbOyvPMlQxHG86eqgtWuR0U3WeE8NAwQ7UFcOhXdCgLw9FoAp8G65xZ046BX1o5ohm_CB8M7R2Aau6gAwtZiY80mlNbhVLW_oTKf_9LCO0azGF_VjOU_IGNX5PG-9Bls6X95vLmGzlX7pGx722et1L1Ks_rDxiO8IAnK_ye7qN-GQtU/s1600/GIF_3_GPG%20white.gif" width="100%" /></div></image> <ul><ul> <li>We’re also making user acquisition campaigns easier and more helpful for PC games. You can now use the <b><a href="https://android-developers.googleblog.com/2024/03/introducing-play-install-referrer-for-google-play-games-on-pc.html" target="_blank">Play Install Referrer API for Google Play Games</a></b> to achieve closed-loop marketing on PC, passing campaign or click information into your game so you can optimize marketing campaigns across ad networks, social, and other channels.</li> </ul></ul> <p>For more news from the Google for Games Developer Summit, check out <a href="http://g.co/gamedevsummit" target="_blank">g.co/gamedevsummit</a>. You can also <a href="https://developers.googleblog.com/2024/03/google-for-games-is-coming-to-gdc-2024.html" target="_blank">connect with us at GDC in San Francisco</a>. We’ll be hosting a full day of sessions on March 19 and a week of hands-on product experience at the Moscone Center, West Hall, Level 2 Lobby from March 18 to March 22.</p> <p>As always, thank you for partnering with us to bring amazing games to players everywhere.</p><p style="text-align: left;"><br /></p> ___________________ <div style="text-align: left;"><em><small><sup>1</sup>Subject to game availability and PC compatibility.</small></em></div> <div style="text-align: left;"><em><small><sup>2</sup>This feature requires PGS SDK V2 integration. Developers can save sign-in information to PGS for users, but only retrieve this once the user has set up a profile.</small></em></div> <div style="text-align: left;"><em><small><sup>3</sup>Feature availability limited to English language users and select titles that are part of the early access program.</small></em></div> <div style="text-align: left;"><em><small><sup>4</sup>Google internal data. New buyer refers to users who made a purchase during this pilot experiment after making no purchase for the past 50 days.</small></em></div> <div style="text-align: left;"><em><small><sup>5</sup>Windows is a trademark of the Microsoft group of companies.</small></em></div> <div style="text-align: left;"><em><small><sup>6</sup>Google internal data.</small></em></div><p> Android Developers Introducing Play Install Referrer for Google Play Games on PC http://android-developers.googleblog.com/2024/03/introducing-play-install-referrer-for-google-play-games-on-pc.html Android Developers Blog urn:uuid:dd317227-1941-3db9-2bc6-0b3a5ee8c5df Tue, 12 Mar 2024 15:45:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwfGYBEanskKwqn3-e_ZHYNFlLki6v5C3WtrilQT6sxD60Zu1-osVht7cR-uspONCCI5XgbgDo8LIdutIAkww_n9-xb3BVi6ynklugk-3KGiODuTOGcNzNVuneGQRcvmL65JVordsHbmVuXsN8Kp848RFbLFzZ1N8Zm4jVUE3fVSVIPXle2l8G6_C7C6o/s1600/Editorial-Battlestar-referrer-social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwfGYBEanskKwqn3-e_ZHYNFlLki6v5C3WtrilQT6sxD60Zu1-osVht7cR-uspONCCI5XgbgDo8LIdutIAkww_n9-xb3BVi6ynklugk-3KGiODuTOGcNzNVuneGQRcvmL65JVordsHbmVuXsN8Kp848RFbLFzZ1N8Zm4jVUE3fVSVIPXle2l8G6_C7C6o/s1600/Editorial-Battlestar-referrer-social.png" style="display: none;" /> <em>Posted by Arjun Dayal, Director – Google Play Games</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB5vIb0Q2nc5lZixebeiGSbntR60RjDnu0mFKGwB8oRI6z7rFZ0FzmpzR0HhN7W6IiCNZqif6hINaHZC91nBbO9JjBXhNi_9X70Pe3XqkYGjKEIPeoQN8v-gK7Vm7Rq-1gD1rMtLDgMkQq4PGGGXMm7hik5vv6k7Tf-GstqJYGD_hDWhEaYqKaH3wORiM/s1600/Editorial-Battlestar-referrer-header.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB5vIb0Q2nc5lZixebeiGSbntR60RjDnu0mFKGwB8oRI6z7rFZ0FzmpzR0HhN7W6IiCNZqif6hINaHZC91nBbO9JjBXhNi_9X70Pe3XqkYGjKEIPeoQN8v-gK7Vm7Rq-1gD1rMtLDgMkQq4PGGGXMm7hik5vv6k7Tf-GstqJYGD_hDWhEaYqKaH3wORiM/s1600/Editorial-Battlestar-referrer-header.png" /></a> <p>Making informed marketing decisions relies on identifying your most valuable user acquisition channels for your games. By tracking referral data, you can understand which traffic sources send the most users to download your app from the Google Play store. These insights can help you make the most of your advertising spend and maximize ROI. That’s why in 2017, we launched the&nbsp;<a href="https://developer.android.com/google/play/installreferrer/library.html" target="_blank">Play Install Referrer API</a>, which gives you an easy, reliable way to track your apps’ referral information directly from the Play store.</p> <p>Until now, this feature was only available for your games in the mobile Play store. Today, we’re pleased to announce support for Google Play Games on PC, allowing you to attribute conversions from your marketing activities on the Web<sup>1</sup>. If you use the <a href="https://developer.android.com/google/play/installreferrer" target="_blank">Google Play Install Referrer</a> API to track your referral sources, you can now attribute conversions to specific campaigns directly from Google Play by manually retrieving referral information, or using third-party analytics tools from Google’s <a href="https://support.google.com/google-ads/answer/12961402" target="_blank">App Attribution Partners</a>.</p> <p>Getting started is easy. First, generate a Google Play URL for your game’s <a href="https://developer.android.com/distribute/marketing-tools/linking-to-google-play#OpeningDetails" target="_blank">Google Play store listing page</a> and add a referrer query parameter for your Web campaign. Then, when a PC user clicks the link, they will be redirected to your game’s listing page on the <a href="https://play.google.com/store/games" target="_blank">Google Play Web store</a>, which will give them the option to “Install on Windows.” Once the user launches your game, you’ll be able to track the referral using the <a href="https://developer.android.com/google/play/installreferrer" target="_blank">Google Play Install Referrer library</a>.</p> <blockquote><span style="font-size: large;"><i>“With integration support from Adjust, developers can quickly and efficiently measure marketing campaigns for their games on Google Play Games on PC. We’re excited about the opportunity this brings for developers to broaden their games’ reach and strengthen cross-platform measurement.”&nbsp;</i></span><p></p><p><b>- Gijsbert Pols, Director of Connected TV &amp; New Channels, Adjust</b></p></blockquote> <p><a href="https://developer.android.com/games/playgames/user-acquisition" target="_blank">Learn more</a> about third-party referral codes for Google Play Games on PC and start optimizing your marketing performance today.</p><br/> ______________ <p><small><em><sup>1</sup>Subject to device compatibility with Google Play Games on PC.</em></small></p> #GoogleforGames Announcements Google Play Web Android Developers Enhanced screen sharing capabilities in Android 14 (and Google Meet) improve meeting productivity http://android-developers.googleblog.com/2024/03/enhanced-screen-sharing-capabilities-in-android-14.html Android Developers Blog urn:uuid:2020dc19-180a-3223-7aa0-86eb70b83c22 Mon, 11 Mar 2024 19:00:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_sdASOx_frDm-yazYXC4aKeqWikdYk2buvvFtHk6HO7wg1QuLjkIuo9DDQKuPJ1e1TlHYNGK9znxZgPd8CSLzB-7oYQHsbz4BUOdzB332l1CSKgVX9yho-S3hm8z0FUUb-K08P8DHXaI1sz59udOPgIun_HUpUOfKFIKtBkeqAwxEkRhJX3yTqhtBCgc/s1600/Android-13-Desktop-AVD-Social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_sdASOx_frDm-yazYXC4aKeqWikdYk2buvvFtHk6HO7wg1QuLjkIuo9DDQKuPJ1e1TlHYNGK9znxZgPd8CSLzB-7oYQHsbz4BUOdzB332l1CSKgVX9yho-S3hm8z0FUUb-K08P8DHXaI1sz59udOPgIun_HUpUOfKFIKtBkeqAwxEkRhJX3yTqhtBCgc/s1600/Android-13-Desktop-AVD-Social.png" style="display: none;" /> <em>Posted by Francesco Romano – Developer Relations Engineer on Android</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxlVH6A7vyTdl1iUORCTBBC5Z2_5P-Up_WplvQ8OUjgib3yG3yyGWX8kEcAhC1Rzfr5ym4yWrCrQiT5wUGFqG7HCvub8ix0a1np7sYR8ePr_dLaXCo1GrIrE_KAjl3ACBTRodEemNwHqRDEZKPTNIGkJkXi3ECBfyFn6FPCytQ_1GzSPQ6j676JEoKWOE/s1600/Android-13-Desktop-AVD-Header.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxlVH6A7vyTdl1iUORCTBBC5Z2_5P-Up_WplvQ8OUjgib3yG3yyGWX8kEcAhC1Rzfr5ym4yWrCrQiT5wUGFqG7HCvub8ix0a1np7sYR8ePr_dLaXCo1GrIrE_KAjl3ACBTRodEemNwHqRDEZKPTNIGkJkXi3ECBfyFn6FPCytQ_1GzSPQ6j676JEoKWOE/s1600/Android-13-Desktop-AVD-Header.png" /></a> <h2 style="text-align: left;"><span style="font-size: x-large;">App screen sharing improves privacy and productivity</span></h2> <p>Android 14 QPR2 brings exciting advancements in user privacy and streamlined multitasking with app screen sharing. No longer do users have to broadcast their entire screen while screen sharing or casting, ensuring they share exactly what they want to share.</p> <p>Leverage the new <a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection" target="_blank">MediaProjection APIs</a> to customize the screen sharing experience and deliver even greater utility to your users.</p> <h3 style="text-align: left;"><span style="font-size: large;">What is app screen sharing?</span></h3> <p>Prior to Android 14, users could only share or record their entire screen on Android devices, which could expose private information in other apps or notifications.</p> <p>App screen sharing is a new platform feature that lets users restrict sharing and recording to a single app window, mitigating the risk of oversharing private messages or notifications. With app screen sharing, the status bar, navigation bar, notifications, and other system UI elements are excluded from the shared display. Only the content of the selected app is shared.</p> <p>This not only enhances security for screen sharing, but also enables new use cases on large screens. Users can improve multitasking productivity – such as screen sharing while attending a meeting – by taking advantage of extra screen space on these larger devices.</p> <h3 style="text-align: left;"><span style="font-size: large;">How does it work?</span></h3> <p>There are three different entry points for users to start app screen sharing:</p> <ul style="text-align: left;"><ol> <li>Start casting from Quick Settings</li> <li>Start screen recording from Quick Settings</li> <li>Launch from an app with screen sharing or recording capabilities via the MediaProjection API</li> </ol></ul> <p>Let’s consider an example where a host user wants to share a single app to the participants of a video call.</p> <p>The host user starts screen sharing as usual, but now in Android 14 they are presented with an updated dialog that allows them to choose whether to share a single app instead of their entire screen.</p> <p>The host user decides to share a single app, and they select the app from the App Selector.</p> <p>During screen sharing, the video call participants can see only the content from the selected app.</p> <p>The host user can end the screen capture in a few ways: from the app where sharing started, in the notification shade, by closing the app being shared, or by ending the video call.</p> <image><div style="text-align: center;"><img alt="visual journey of host sharing a single app to the participants in a video call across four panels" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyFA8txeUeB4A3r51f5Iv1uf9fIpbiQHODGbtwWEo1Jlcj1mTwOGGv5kcpFcypBCiLeepwmPMiod-sF5f_b9j6oa-iRwNIRgl9EuNv_4gDoCWnum_h4VqokCrxmIqW5bJrB9I4lGFCc0P8Fo7ot_-jL_Z5NHhi7BGXv3_DDJcd-y6CtoK3P0NKSyXXMH4/s1600/App-screen-sharing-inline.png" width="auto" /></div></image> <h3 style="text-align: left;"><span style="font-size: large;">How to support app screen sharing?</span></h3> <p>Apps that use the <a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection?_gl=1*192c0v6*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDAyMC4wLjAuMA.." target="_blank">MediaProjection APIs</a> are capable of starting app screen sharing <b>without any code changes</b>. However, it’s important to test your app to ensure that the screen sharing experience works as intended, since the user flow changes with this new behavior. Previously, the user would stay in the host app after the permission dialog. With app screen sharing the user is not returned to the host app, but the target app to be shared is launched instead. If the target app was already running in foreground (e.g. in multi window mode), then it simply becomes the top focused app.</p> <p>Android 14 also introduces two callback methods to empower you to customize the sharing experience:</p> <p><span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection.Callback?_gl=1*1dwltys*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDAyMC4wLjAuMA..#oncapturedcontentresize" target="_blank">MediaProjection.Callback#onCapturedContentResize(width, height)</a></span> is invoked immediately after capture begins or when the size of the captured region changes. The method arguments provide the accurate sizing for the streamed capture.</p> <p><b>Note:</b> The given width and height correspond to the same width and height that would be returned from <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/view/WindowMetrics.html?_gl=1*fzz62x*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDE4OS4wLjAuMA..#getBounds%28%29" target="_blank">android.view.WindowMetrics#getBounds()</a></span> of the captured region.</p> <p>If the recorded content has a different aspect ratio from either the <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/hardware/display/VirtualDisplay.html?_gl=1*fzz62x*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDE4OS4wLjAuMA.." target="_blank">VirtualDisplay</a></span> or output <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/view/Surface.html?_gl=1*fzz62x*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDE4OS4wLjAuMA.." target="_blank">Surface</a></span>, the captured stream has black bars around the recorded content. The application can avoid the black bars around the recorded content by updating the size of both the <span style="color: #0d904f; font-family: Courier;">VirtualDisplay</span> and output <span style="color: #0d904f; font-family: Courier;">Surface</span>:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">onCapturedContentResize</span>(width: Int, height: Int): String { <span style="color: #408080; font-style: italic;">// VirtualDisplay instance from MediaProjection#createVirtualDisplay().</span> virtualDisplay.resize(width, height, dpi) <span style="color: #408080; font-style: italic;">// Create a new Surface with the updated size.</span> <span style="color: green; font-weight: bold;">val</span> textureName: Int <span style="color: #408080; font-style: italic;">// the OpenGL texture object name</span> <span style="color: green; font-weight: bold;">val</span> surfaceTexture = SurfaceTexture(textureName) surfaceTexture.setDefaultBufferSize(width, height) <span style="color: green; font-weight: bold;">val</span> surface = Surface(surfaceTexture) <span style="color: #408080; font-style: italic;">// Ensure the VirtualDisplay has the updated Surface to send the capture to.</span> virtualDisplay.setSurface(surface) } </pre></div> <p>The other API is <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/media/projection/MediaProjection.Callback?_gl=1*1rggbp6*_up*MQ..*_ga*MTIxNjAwMjcxOC4xNzA4MDgwMDIx*_ga_6HH9YJMN9M*MTcwODA4MDAyMC4xLjAuMTcwODA4MDAyMC4wLjAuMA..#oncapturedcontentvisibilitychanged" target="_blank">MediaProjection.Callback#onCapturedContentVisibilityChanged(isVisible)</a></span>, which is invoked after capture begins or when the visibility of the captured region changes. The method argument indicates the current visibility of the captured region.</p> <p>The callback is triggered when:</p> <ul><ul> <li>The captured region becomes invisible <span style="color: #0d904f; font-family: Courier;">(isVisible==False)</span>.This may happen when the projected app is not topmost anymore, like when another app entirely covers it, or the user navigates away from the captured app.</li> <li>The captured region becomes visible again <span style="color: #0d904f; font-family: Courier;">(isVisible==True)</span>.This may happen if the user moves the covering app to show at least some portion of the captured app (for example, the user has multiple apps visible in multi-window mode).</li> </ul></ul> <p>Applications can take advantage of this callback by showing or hiding the captured content from the output <span style="font-family: Courier;"><a href="https://developer.android.com/reference/kotlin/android/view/Surface.html" target="_blank">Surface</a></span> based on whether the captured region is currently visible to the user. You should pause or resume the sharing accordingly in order to conserve resources.</p> <h3 style="text-align: left;"><span style="font-size: large;">How Google Meet is improving meeting productivity</span></h3> <blockquote><span style="font-size: large;"><i>“App screen sharing enables users to share specific information in a Meet call without oversharing private information on the screen like messages and notifications. Users can choose specific apps to share, or they can share the whole screen as before. Additionally, users can leverage split-screen mode on large screen devices to share content while still seeing the faces of friends, families, coworkers, and other meeting participants.”&nbsp;</i></span><b>- Product Manager at Google Meet</b></blockquote> <p>Let’s see app screen sharing in action during a video call, in this coming-soon version of Google Meet!</p> <image><div style="text-align: center;"><img alt="moving image of app screen sharing in action during a video call on Google Meet" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0_voCiK0Puj-DzOezfUac_cI7SZ8oiRMm-0y4UKRrfvNr3iyPk-4u6DK8hXpPykOiPZp3idl73ky7zztsh3v_XvH9qRLg-mFTNPWe1xTUq2cjyb3da0J0j4NMuuVJQP0iQFJv6J0TTYuRZdCb7o06PLmCAajZ940i2sgMOQ7IIYH-edRHtzjfw1PDJuQ/s1600/image1.gif" width="auto" /></div></image> <h3 style="text-align: left;"><span style="font-size: large;">Window on the world</span></h3> <p>App screen sharing opens doors (and windows) for more focused and secure app experiences within the Android ecosystem.</p> <p>This new feature enhances several use cases:</p> <ul><ul> <li><b>Collaboration apps</b> can facilitate focused discussion on specific design elements, documents, or spreadsheets without including distracting background details.</li> <li><b>Tech support</b> agents can remotely view the user's problem app without seeing potentially sensitive content in other areas.</li> <li><b>Video conferencing tools</b> can share a presentation window selectively rather than the entire screen.</li> <li><b>Educational apps</b> can demonstrate functionality without compromising student privacy, and students can share projects without fear of showing sensitive information.</li> </ul></ul> <p>By thoughtfully implementing app screen sharing, you can establish your app as a champion of user privacy and convenience.</p> <p></p> App Best Practices conferencing foldables meet partial Privacy Productivity screen screensharing Sharing Tablets Video videocall Android Developers Better, faster, stronger time zone updates on Android http://android-developers.googleblog.com/2024/03/better-faster-stronger-time-zone-updates-on-android.html Android Developers Blog urn:uuid:1f0020b3-f84c-8f95-5e17-39ebe418afaa Fri, 08 Mar 2024 09:00:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9JvUThxwLTM03JTYkygOtTnzlsM6PwlsfpEHPLOp-LuGv4XwVAR4UUBSgDXazrj482_FDb10KiBARaZJZa36pPnMpitYYl8AABqq8pAPxEVNSQZs1G-hkyBxp25fSll_ZxrNCt1HZioP2kwJX-adozbdZ8dkUoML7KLhJB8bUy1QNI6yE2GzGsqtqQ6A/s1600/social-Better,-faster,-stronger-timezone-updates-on-Android.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9JvUThxwLTM03JTYkygOtTnzlsM6PwlsfpEHPLOp-LuGv4XwVAR4UUBSgDXazrj482_FDb10KiBARaZJZa36pPnMpitYYl8AABqq8pAPxEVNSQZs1G-hkyBxp25fSll_ZxrNCt1HZioP2kwJX-adozbdZ8dkUoML7KLhJB8bUy1QNI6yE2GzGsqtqQ6A/s1600/social-Better,-faster,-stronger-timezone-updates-on-Android.png" style="display: none;" /> <em>Posted by Almaz Mingaleev – Software Engineer and Masha Khokhlova – Technical Program Manager</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu_XZWUxUGTyu6vmO0ul45K8wOtANb_tMiy3yZGUcNrFydI7sAgJ8FneIcrHYqhm8I5MRNpHjIKIy-53GoJi4F4_-shBDcfqP6XQy3w5TC6PL9pNXA2iPV-It4q32PzaN68xmOyQrnbE4BeBp60vubra0PQIX6EB8oCiXsLl53tcsAwyfICzYxqTggZQw/s1600/header-Better,faster,-stronger-timezone-updates-on-Android.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu_XZWUxUGTyu6vmO0ul45K8wOtANb_tMiy3yZGUcNrFydI7sAgJ8FneIcrHYqhm8I5MRNpHjIKIy-53GoJi4F4_-shBDcfqP6XQy3w5TC6PL9pNXA2iPV-It4q32PzaN68xmOyQrnbE4BeBp60vubra0PQIX6EB8oCiXsLl53tcsAwyfICzYxqTggZQw/s1600/header-Better,faster,-stronger-timezone-updates-on-Android.png" /></a> <p>It's that time of year again when many of us move our clocks! Oh wait, your Android devices did it automatically, didn’t they? For Android users living in many countries, this may not be surprising. For example, the US, EU and UK governments haven't changed their time legislation in a while<sup>*</sup>, so users wake up every morning to see the correct time.</p> <p>But, what happens when time laws change? If you look globally, governments can and do change their time laws, sometimes every year, and Android devices have to keep up to support our global user base. </p> <p>To implement a region’s time legislation, Android devices have to follow a set of encoded rules. What are these rules? Let’s start with why rules are needed in the first place. Clearly, 7am in Los Angeles and 7am in London are not the same time. Moreover, if you are in London and want to know the time in Los Angeles, you have to know how many hours to subtract, and this is not fixed throughout the year<sup>**</sup>. So to tell local time (time your watches should show) it is convenient to have a reference clock that everybody on the planet agrees on. This clock is named <a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Timehttps://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank">UTC</a>, coordinated universal time. Local time in London during winter matches UTC, during summer it is calculated by adding one hour to UTC, usually referred to as UTC+1. For Los Angeles local time during summer is UTC-8 (8 hours behind, UTC offset is -8 hours) and during winter it is UTC-7 correspondingly. When a region changes from one offset to another, we call that a “transition”. Combination of these offsets and rules when a transition happens (such as “last Sunday of March” or “first Sunday on or after 8th March”) defines a time zone. For some countries, the time zone rules can be very simple and primarily determined by their chosen UTC offset: “no transitions, we don’t move our clocks forwards and backwards”.</p> <p>Governments can decide to change the UTC offset for regions, introduce new time zone regions, or alter the day that daylight saving transitions occur. When governments do this, the time zone rules on every Android device needs to be updated, otherwise the Android device will continue to follow the old rules, which can lead to an incorrect local time being shown to users in the affected areas.</p> <p>Android is not alone in needing to keep track of this information. Fortunately, there is a database supported by IANA (<a href="https://www.iana.org/time-zones" target="_blank">Internet Assigned Numbers Authority</a>) and maintained by a small group of volunteers known as the TZDB (Time Zone Database) which is used as a basis for local timekeeping on most modern operating systems. The TZDB contains most of the information that Android needs.</p> <p>There is no schedule, but typically the TZDB releases a new update 4-5 times a year. The Android team wants to release updates that affect its devices as soon as possible.</p> <p>How do these changes reach your devices?</p> <ul> <div style="text-align: left;">1.<span>&nbsp;&nbsp; &nbsp;</span>Government signs a law / decree.</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">2.<span>&nbsp;&nbsp; &nbsp;</span>Someone lets IANA know about these changes</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">3.<span>&nbsp;&nbsp; &nbsp;</span>Depending on how much lead time was given and changes announced by other countries IANA publishes a new TZDB release.</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">4.<span>&nbsp;&nbsp; &nbsp;</span>The Android team incorporates the TZDB release (along with a small amount additional information we obtain from related projects and derive ourselves) into our codebase.</div><div style="text-align: left;"><br /></div> <div style="text-align: left;">5.<span>&nbsp;&nbsp; &nbsp;</span>We roll-out these updates to your devices. How the roll-out happens depends on the type and age of the Android device.</div><div style="text-align: left;"><br /></div> <ul><ul><div>a.<span>&nbsp;&nbsp; &nbsp;</span>Many mobile Android devices are covered by Google’s Project <a href="https://source.android.com/docs/core/ota/modular-system" target="_blank">Mainline</a>, which means that Google sends updates to devices directly.</div><div><br /></div></ul></ul> <ul><ul><div>b.<span>&nbsp;&nbsp; &nbsp;</span>Some devices are handled by the device’s manufacturer who takes the Android team’s source code updates and releases them to devices themselves according to their own update schedule.</div></ul></ul></ul> <p>As you can see, there are quite a few steps. Applying, testing and releasing an update can take weeks. And it is not just Android and other computer operating systems like it who need to take action. There are usually telecoms, banks, airlines and software companies that have to make adjustments to their own systems and time tables. Citizens of a country need to be made aware of changes so they know what to expect, especially if they are using older devices that might not receive necessary updates. And it all takes time and can cause problems for countless people if it isn’t handled well. The amount of disruption caused by a change is usually determined by the clarity of the legislation and notice period that governments provide. The TZDB volunteers are good at spotting changes, but it helps if the governments notify IANA directly, especially when it’s not clear the exact regions or existing laws affected. Unfortunately, many of the recent time zone changes were given with about a month or less notice time. Android has a set of <a href="https://source.android.com/docs/core/connect/time/time-zone-policy-recommendations" target="_blank">recommendations</a> for how much notice to provide. Other operating systems have similar recommendations.</p> <p>Android is constantly evolving. One of such improvements, Project Mainline, <a href="https://android-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html" target="_blank">introduced</a> in Android 10, has made a big difference in how we update important parts of the Android operating system. It allows us to deliver select AOSP components directly through Google Play, making updates faster than a full OTA update and reducing duplication of efforts done by each OEM.</p> <p>From the beginning, time zone rules were a component in Mainline, called <a href="https://source.android.com/docs/core/ota/modular-system/timezone" target="_blank">Time Zone Data or tzdata module</a>. This integration allowed us to react more quickly to government-mandated time zone changes than before. However until 2023 tzdata updates were still bundled with other Mainline changes, sometimes leading to testing complexities and slower deployment.</p> <p>In 2023, we made further investments in Mainline's infrastructure and decoupled the tzdata module from the other components. With this isolation, we gained the ability to respond rapidly to time zone legislation changes — often releasing updates to Android users outside of the established release cadence. Additionally, this change means time zone updates can reach a far greater number of Android devices, ensuring you as Android users always see the correct time.</p> <p>So while your Android phone may not be able to restore that lost hour of sleep, you can rest assured that it will show the accurate time, thanks to volunteers and the Android team.</p> <p>Curious about the ever-changing world of time zones? Explore the <a href="https://data.iana.org/time-zones/tz-link.html" target="_blank">IANA Time Zone Database</a> and learn more about how <a href="https://source.android.com/docs/core/connect/time" target="_blank">time and time zones are managed</a> on Android.</p><br /> <p><small><em><sup>*</sup>In 2018-2019 there were changes in Alaska. This is a blogpost, not a technical documentation!</em></small></p> <p><small><em><sup>**</sup>Because the US and UK apply their daylight saving changes at different local times and on different days of the year.</em></small></p> Daylight savings DST How-To Guide Solve time time zone Android Developers Introducing the Fused Orientation Provider API: Consistent device orientation for all http://android-developers.googleblog.com/2024/03/introducing-fused-orientation-provider-api.html Android Developers Blog urn:uuid:01a3d48f-b45c-533f-ea0e-f8621d9178dd Thu, 07 Mar 2024 22:00:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivlmOIXvZ0LXZ7s7UJSt2VDp1CTLp0uzvJE-6x3OFM7RD56fK17QakAcXpCpPYwf7uGvps_vafNFohnc4Lo0XQXmzNY7XpiEyhltnMz6mR3cgg8EjZmSBv-rYiPaw3AxwbpCY5SsVD7_G1kzo6ZxZVq6dtszshGnp1Bd1X-EmWDg5Wy1NYPrKd7p7tN6I/s1600/social-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivlmOIXvZ0LXZ7s7UJSt2VDp1CTLp0uzvJE-6x3OFM7RD56fK17QakAcXpCpPYwf7uGvps_vafNFohnc4Lo0XQXmzNY7XpiEyhltnMz6mR3cgg8EjZmSBv-rYiPaw3AxwbpCY5SsVD7_G1kzo6ZxZVq6dtszshGnp1Bd1X-EmWDg5Wy1NYPrKd7p7tN6I/s1600/social-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png" style="display: none;" /> <em>Posted by Geoffrey Boullanger – Senior Software Engineer, Shandor Dektor – Sensors Algorithms Engineer, Martin Frassl and Benjamin Joseph – Technical Leads and Managers</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp8dFtNlqMsgK3ffDx0qB8ZflPr8veMx-8cyMDDW7rk453Sn7KLo-j63a5s22_hgKl5K9lnhFnxq1YVMYg7TFaLy7-WsobcOlAvoy3mtFpn34H-GuurME8i_A-HS4gNgjzcb1BeGcMyBO0UXeoG5m8ahfWjwv07qSoWsG3sdt-Fw2mXbv7ZHGXtWuzNEc/s1600/header-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp8dFtNlqMsgK3ffDx0qB8ZflPr8veMx-8cyMDDW7rk453Sn7KLo-j63a5s22_hgKl5K9lnhFnxq1YVMYg7TFaLy7-WsobcOlAvoy3mtFpn34H-GuurME8i_A-HS4gNgjzcb1BeGcMyBO0UXeoG5m8ahfWjwv07qSoWsG3sdt-Fw2mXbv7ZHGXtWuzNEc/s1600/header-Introducing-the-Fused-Orientation-Provider-API--Consistent-device-orientation-for-all-.png" /></a> <p>Device orientation, or attitude, is used as an input signal for many use cases: virtual or augmented reality, gesture detection, or compass and navigation – any time the app needs the orientation of a device in relation to its surroundings. We’ve heard from developers that orientation is challenging to get right, with frequent user complaints when orientation is incorrect. A maps app should show the correct direction to walk towards when a user is navigating to an exciting restaurant in a foreign city!</p> <p>The Fused Orientation Provider (FOP) is a new API in Google Play services that provides quality and consistent device orientation by fusing signals from accelerometer, gyroscope and magnetometer.</p> <p>Although currently the Android Rotation Vector already provides device orientation (and will continue to do so), the new FOP provides more consistent behavior and high performance across devices. We designed the FOP API to be similar to the Rotation Vector to make the transition as easy as possible for developers.</p> <p>In particular, the Fused Orientation Provider</p> <ul style="text-align: left;"><ul> <li>Provides a unified implementation across devices: an API in Google Play services means that there is no implementation variance across different manufacturers. Algorithm updates can be rolled out quickly and independent of Android platform updates;</li></ul></ul><ul style="text-align: left;"><ul> <li>Directly incorporates local magnetic declination, if available;</li></ul></ul><ul style="text-align: left;"><ul> <li>Compensates for lower quality sensors and OEM implementations (e.g., gyro bias, sensor timing).</li> </ul></ul> <p>In certain cases, the FOP returns values piped through from the AOSP Rotation Vector, adapted to incorporate magnetic declination.</p> <h3>How to use the FOP API</h3> <p>Device orientation updates can be requested by creating and sending a DeviceOrientationRequest object, which defines some specifics of the request like the update period.</p> <p>The FOP then outputs a stream of the device’s orientation estimates as quaternions. The orientation is referenced to <b>geographic</b> north. In cases where the local magnetic declination is not known (e.g., location is not available), the orientation will be relative to <b>magnetic</b> north.</p> <p>In addition, the FOP provides the device’s heading and accuracy, which are derived from the orientation estimate. This is the same heading that is shown in Google Maps, which uses the FOP as well. We recently added changes to better cope with magnetic disturbances, to improve the reliability of the cone for Google Maps and FOP clients.</p> <p>The update rate can be set by requesting a specific update period. The FOP does not guarantee a minimum or maximum update rate. For example, the update rate can be faster than requested if another app has a faster parallel request, or it can be slower as requested if the device doesn’t support the high rate.</p> <p>For full specification of the API, please consult the API documentation:</p> <ul><ul> <li>Register for updates: <a href="https://developers.google.com/android/reference/com/google/android/gms/location/FusedOrientationProviderClient#public-abstract-taskvoid-requestorientationupdates-deviceorientationrequest-request,-executor-executor,-deviceorientationlistener-listener" target="_blank"><span style="font-family: courier;">requestOrientationUpdates(...)</span></a> </li> <li>Data is returned as <a href="https://developers.google.com/android/reference/com/google/android/gms/location/DeviceOrientation" target="_blank"><span style="font-family: courier;">DeviceOrientation</span></a> </li> </ul></ul> <h3>Example usage (Kotlin)</h3> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;"><span style="color: green; font-weight: bold;">package</span> <span style="color: blue; font-weight: bold;">...</span> import android.content.Context import com.google.android.gms.location.DeviceOrientation import com.google.android.gms.location.DeviceOrientationListener import com.google.android.gms.location.DeviceOrientationRequest import com.google.android.gms.location.FusedOrientationProviderClient import com.google.android.gms.location.LocationServices import com.google.common.flogger.FluentLogger import java.util.concurrent.Executors <span style="color: green; font-weight: bold;">class</span> <span style="color: blue;">Example</span>(context: Context) { <span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">val</span> logger: FluentLogger = FluentLogger.forEnclosingClass() <span style="color: #408080; font-style: italic;">// Get the FOP API client</span> <span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">val</span> fusedOrientationProviderClient: FusedOrientationProviderClient = LocationServices.getFusedOrientationProviderClient(context) <span style="color: #408080; font-style: italic;">// Create an FOP listener</span> <span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">val</span> listener: DeviceOrientationListener = DeviceOrientationListener { orientation: DeviceOrientation -&gt; <span style="color: #408080; font-style: italic;">// Use the orientation object returned by the FOP, e.g.</span> logger.atFinest().log(<span style="color: #ba2121;">"Device Orientation: %s deg"</span>, orientation.headingDegrees) } <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">start</span>() { <span style="color: #408080; font-style: italic;">// Create an FOP request</span> <span style="color: green; font-weight: bold;">val</span> request = DeviceOrientationRequest.Builder(DeviceOrientationRequest.OUTPUT_PERIOD_DEFAULT).build() <span style="color: #408080; font-style: italic;">// Create (or re-use) an Executor or Looper, e.g.</span> <span style="color: green; font-weight: bold;">val</span> executor = Executors.newSingleThreadExecutor() <span style="color: #408080; font-style: italic;">// Register the request and listener</span> fusedOrientationProviderClient .requestOrientationUpdates(request, executor, listener) .addOnSuccessListener { logger.atInfo().log(<span style="color: #ba2121;">"FOP: Registration Success"</span>) } .addOnFailureListener { e: Exception? -&gt; logger.atSevere().withCause(e).log(<span style="color: #ba2121;">"FOP: Registration Failure"</span>) } } <span style="color: green; font-weight: bold;">fun</span> <span style="color: blue;">stop</span>() { <span style="color: #408080; font-style: italic;">// Unregister the listener</span> fusedOrientationProviderClient.removeOrientationUpdates(listener) } }</span> </pre></div> <h3>Technical background</h3> <p>The Android ecosystem has a wide variety of system implementations for sensors. Devices should meet the criteria in the <a href="https://source.android.com/docs/compatibility/cdd" target="_blank">Android compatibility definition document (CDD)</a> and must have an accelerometer, gyroscope, and magnetometer available to use the fused orientation provider. It is preferable that the device vendor implements the high fidelity sensor portion of the CDD.</p> <p>Even though Android devices adhere to the Android CDD, recommended sensor specifications are not tight enough to fully prevent orientation inaccuracies. Examples of this include magnetometer interference from internal sources, and delayed, inaccurate or nonuniform sensor sampling. Furthermore, the environment around the device usually includes materials that distort the geomagnetic field, and user behavior can vary widely. To deal with this, the FOP performs a number of tasks in order to provide a robust and accurate orientation:</p> <ol><ul> <li>Synchronize sensors running on different clocks and delays;</li> <li>Compensate for the hard iron offset (magnetometer bias);</li> <li>Fuse accelerometer, gyroscope, and magnetometer measurements to determine the orientation of the device in the world;</li> <li>Compensate for gyro drift (gyro bias) while moving;</li> <li>Produce a realistic estimate of the compass heading accuracy.</li> </ul></ol> <p>We have validated our algorithms on comprehensive test data to provide a high quality result on a wide variety of devices.</p> <h3>Availability and limitations</h3> <p>The Fused Orientation Provider is available on all devices running Google Play services on Android 5 (Lollipop) and above. Developers need to add the dependency <span style="color: #0d904f; font-family: Courier;">play-services-location:21.2.0</span> (or above) to access the new API.</p> <p><b>Permissions</b></p> <p>No permissions are required to use the FOP API. The output rate is limited to 200Hz on devices running API level 31 (Android S) or higher, unless the <span style="color: #0d904f; font-family: Courier;">android.permissions.HIGH_SAMPLING_RATE_SENSORS</span> permission was added to your Manifest.xml.</p> <p><b>Power consideration</b></p> <p>Always request the longest update period (lowest frequency) that is sufficient for your use case. While more frequent FOP updates can be required for high precision tasks (for example Augmented Reality), it comes with a power cost. If you do not know which update period to use, we recommend starting with <span style="color: #0d904f; font-family: Courier;">DeviceOrientationRequest::OUTPUT_PERIOD_DEFAULT</span> as it fits most client needs.</p> <p><b>Foreground behavior</b></p> <p>FOP updates are only available to apps running in the foreground.</p><br /> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;">Copyright <span style="color: #666666;">2023</span> Google LLC<span style="color: #666666;">.</span> SPDX<span style="color: #666666;">-</span>License<span style="color: #666666;">-</span>Identifier<span style="color: #666666;">:</span> Apache<span style="color: #666666;">-2.0</span> </pre></div> announcement Best Practices Developer Tools GooglePlay heading Location Orientation rotation sensors-and-location wear Android Developers #TheAndroidShow: the latest from MWC, Gemini Nano, Android 15 and more! http://android-developers.googleblog.com/2024/03/tas24-recap.html Android Developers Blog urn:uuid:76630c5f-f0d5-896d-16d0-9e57bab10b8d Thu, 07 Mar 2024 20:52:38 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzCfvtscYp-s6T4XFATx4pLgXixHBYITpSFBtZOFlWhbMT-x_Qf8EN_rGmlp_2Da68eufEQGt5yiRDFbq3YovBKZqVRS70Q9KegA1TzDJPAFwWdlcKIxQJPR6fxL0Hx3SPN6oqnVrZEq_WlMFqXBcp2khwgtvo7spv2y-9WhF38fBrwan4PPorToZ-W4g/s1600/Image_20240306_143230.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzCfvtscYp-s6T4XFATx4pLgXixHBYITpSFBtZOFlWhbMT-x_Qf8EN_rGmlp_2Da68eufEQGt5yiRDFbq3YovBKZqVRS70Q9KegA1TzDJPAFwWdlcKIxQJPR6fxL0Hx3SPN6oqnVrZEq_WlMFqXBcp2khwgtvo7spv2y-9WhF38fBrwan4PPorToZ-W4g/s1600/Image_20240306_143230.png" style="display: none;" /> <em>Posted by Anirudh Dewani, Director of Android Developer Relations</em> <p><br /></p><p>Last week, Android device makers released a slew of new devices, and today we’re unpacking what that means for developers, as well as the latest in Gemini Nano, Android 15, Jetpack Compose and more, in another episode of our quarterly show, <a href="https://d.android.com/events/show" target="_blank">#TheAndroidShow</a>:</p> <iframe allowfullscreen="" class="BLOG_video_class" height="415" src="https://www.youtube.com/embed/pou4o1X1DI4" width="100%" youtube-src-id="pou4o1X1DI4"></iframe> <h2>The lastest wearables and foldables – get building!</h2> <p>Android device makers unveiled their latest wearables and foldables last week at Mobile World Congress, and we were on the ground in Barcelona taking a look at those new devices and how you can get started building on top of them. A few of our favorites:</p> <ul style="text-align: left;"><ul> <li><b>OnePlus Watch 2</b>, powered with the latest version of Wear OS (<a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">Wear OS 4</a>). This device capitalizes on the updates we’ve made to the <a href="https://wearos.google.com/" target="_blank">Wear OS by Google</a> user experience, specifically improving power and performance, <a href="https://android-developers.googleblog.com/2024/02/wear-os-hybrid-interface-boosting-power-and-performance.html" target="_blank">you can read more here.</a></li></ul></ul> <ul style="text-align: left;"><ul><li><b>Xiaomi Watch 2</b>,the <a href="https://www.mi.com/global/product/xiaomi-watch-2/" target="_blank">latest smart watch</a> from the Xiaomi team. This device is powered by Wear OS by Google and provides upgraded camera, fitness, and sleep experiences to allow users to get the most from their device.</li></ul></ul> <ul style="text-align: left;"><ul><li><b>PORSCHE DESIGN HONOR Magic V2 RSR</b>, the world’s <a href="https://www.hihonor.com/global/phones/honor-magic-v2-rsr-porsche-design/" target="_blank">thinnest inward foldable smartphone</a>. This is the latest foldable for Android and was designed with the user experience at the forefront, including human-centric eye comfort technology.</li> </ul></ul> <p>Compose is an amazing way to build apps for your users across form factors. <a href="https://developer.android.com/training/wearables/compose" target="_blank">Compose for Wear OS</a> and the upcoming <a href="https://medium.com/androiddevelopers/new-apis-for-adaptive-layouts-in-jetpack-compose-f27cace48bcd" target="_blank">adaptive layouts</a> for large screens help devs bring their apps to life with less code, powerful tools, and intuitive APIs. Check out the <a href="https://d.android.com/wear/gallery" target="_blank">Wear OS</a> and <a href="https://developer.android.com/large-screens/gallery" target="_blank">Large Screen galleries</a>, where you can find UX inspiration and design guidance tailored to your type of app.</p><br /> <iframe allowfullscreen="" class="BLOG_video_class" height="415" src="https://www.youtube.com/embed/BcGfpspxX2E" width="100%" youtube-src-id="BcGfpspxX2E"></iframe><br /> <p><br /></p> <h2 style="text-align: left;"><span style="font-size: x-large;">Behind the scenes, with Gemini Nano and AICore</span></h2> <p>With all of the excitement around generative AI, it could be daunting to know where to start. So in today’s show, we’re taking you behind the scenes with <a href="https://android-developers.googleblog.com/2023/12/a-new-foundation-for-ai-on-android.html" target="_blank">Gemini Nano</a>, Google’s most efficient model built for on-device tasks, and <a href="http://d.android.com/ml/aicore" target="_blank">AICore</a>, Android’s system service for on-device foundation models. And we’re spotlighting how the team that builds the Recorder app used Gemini Nano to help summarize users’ voice memos on-device and with privacy in mind. And here’s the best part: the team built the feature in a short time with only a small number of engineers.</p><br /> <iframe allowfullscreen="" class="BLOG_video_class" height="415" src="https://www.youtube.com/embed/hHIMUgTuoXE" width="100%" youtube-src-id="hHIMUgTuoXE"></iframe><br /> <p><br /></p> <h2 style="text-align: left;"><span style="font-size: x-large;">Now in Android</span></h2> <p>We celebrated the 100th episode of Now in Android, covering the latest developer news, including:</p> <ul style="text-align: left;"><ul> <li><a href="http://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html" target="_blank"><b>The Android 15 developer preview</b></a>, which includes updates to <a href="https://developer.android.com/design-for-safety/privacy-sandbox" target="_blank">Privacy Sandbox</a> and <a href="https://developer.android.com/health-and-fitness/guides/health-connect" target="_blank">Health Connect</a>, <a href="https://developer.android.com/reference/android/security/FileIntegrityManager" target="_blank">new file integrity protection APIs</a>, <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics" target="_blank">enhanced camera controls</a>, <a href="https://developer.android.com/reference/android/media/midi/MidiUmpDeviceService" target="_blank">virtual MIDI 2.0 devices</a>, an expanded <a href="https://developer.android.com/games/optimize/adpf" target="_blank">Android Dynamic Performance Framework</a>, and more.</li></ul></ul><ul style="text-align: left;"><ul> <li><a href="http://android-developers.googleblog.com/2024/02/android-studio-iguana-is-stable.html" target="_blank"><b>Android Studio Iguana</b></a> #JetpackCompose #TheAndroidShow Android UI events Explore Jetpack Compose Android Developers Introducing a new Text-To-Speech engine on Wear OS http://android-developers.googleblog.com/2024/03/introducing-new-text-to-speech-engine-wear-os.html Android Developers Blog urn:uuid:cf3f1a43-3bd2-acd4-fc4c-dc06668857e4 Thu, 07 Mar 2024 03:04:58 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz59FlzcTBW59NOVhyLb_vZd-ePuN6w-TMUiMvxaZDiofpQHayKQn8sPLmP-bmuj5-6kPS7wHUOTqpzOTwoRqBRO1zdnLE3EuqPaH97Cw0ezGgLFKIbX0dzXfI4xx0bPa8XLl6FyvhYKs3XKBowHEz2ambpEB1H5UypEtPrn-dXMXkGlJEKu7NdjMV/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz59FlzcTBW59NOVhyLb_vZd-ePuN6w-TMUiMvxaZDiofpQHayKQn8sPLmP-bmuj5-6kPS7wHUOTqpzOTwoRqBRO1zdnLE3EuqPaH97Cw0ezGgLFKIbX0dzXfI4xx0bPa8XLl6FyvhYKs3XKBowHEz2ambpEB1H5UypEtPrn-dXMXkGlJEKu7NdjMV/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-social.png" style="display: none;" /> <em>Posted by Ouiam Koubaa – Product Manager and Yingzhe Li – Software Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVviCwvyzix33x3GBKtuFuXHOivMjeQP5FrEX8df4khO7Y6KSKwdAqBIRmac1eN5T9EIMbwATiUxqjjnOoMZow-T458ZZadL0fpwy901_pNLayQ-wLUAm8w0W2OyNZk_6KAYPwHOLqKcu9bLnpoc8K-3RIQvNeRV11iSzBSL2U20bRnb89EXghEHBs/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-header.png"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVviCwvyzix33x3GBKtuFuXHOivMjeQP5FrEX8df4khO7Y6KSKwdAqBIRmac1eN5T9EIMbwATiUxqjjnOoMZow-T458ZZadL0fpwy901_pNLayQ-wLUAm8w0W2OyNZk_6KAYPwHOLqKcu9bLnpoc8K-3RIQvNeRV11iSzBSL2U20bRnb89EXghEHBs/s1600/Android%20-%20Policy%20Updates-%20Improving%20Wear%20App%20Quality-header.png" /></a> <p>Today, we’re excited to announce the release of a new Text-To-Speech (TTS) engine that is performant and reliable. Text-to-speech turns text into natural-sounding speech across more than 50 languages powered by Google’s machine learning (ML) technology. The new text-to-speech engine on Wear OS uses smaller and more efficient prosody ML models to bring faster synthesis on Wear OS devices.</p> <p>Use cases for Wear OS’s text-to-speech can range from accessibility services, coaching cues for exercise apps, navigation cues, and reading aloud incoming alerts through the watch speaker or Bluetooth connected headphones. The engine is meant for brief interactions, so it shouldn’t be used for reading aloud a long article, or a long summary of a podcast.</p> <h3>How to use Wear OS’s TTS</h3> <p>Text-to-speech has long been supported on Android. Wear OS’s new TTS has been tuned to be performant and reliable on low-memory devices. All the Android APIs are still the same, so developers use the same process to integrate it into a Wear OS app, for example, <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech#speak%28java.lang.CharSequence,%20int,%20android.os.Bundle,%20java.lang.String%29" target="_blank">TextToSpeech#speak</a></span> can be used to speak specific text. This is available on devices that run Wear OS 4 or higher.</p> <p>When the user interacts with the Wear OS TTS for the first time following a device boot, the synthesis engine is ready in about 10 seconds. For special cases where developers want the watch to speak <i><u>immediately</u></i> after opening an app or launching an experience, the following code can be used to pre-warm the TTS engine before any synthesis requests come in.</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;">private fun initTtsEngine() { <span style="color: #666666;">//</span> Callback when TextToSpeech connection is set up val callback <span style="color: #666666;">=</span> TextToSpeech<span style="color: #666666;">.</span>OnInitListener { status <span style="color: #666666;">-&gt;</span> <span style="color: green;">if</span> (status <span style="color: #666666;">==</span> TextToSpeech<span style="color: #666666;">.</span>SUCCESS) { <span style="color: blue;">Log</span><span style="color: #666666;">.</span>i(TAG, <span style="color: #ba2121;">"tts Client Initialized successfully"</span>) <span style="color: #666666;">//</span> Get default TTS locale val defaultVoice <span style="color: #666666;">=</span> tts<span style="color: #666666;">.</span>voice <span style="color: green;">if</span> (defaultVoice <span style="color: #666666;">==</span> null) { <span style="color: blue;">Log</span><span style="color: #666666;">.</span>w(TAG, <span style="color: #ba2121;">"defaultVoice == null"</span>) <span style="color: green;">return</span><span style="color: #19177c;">@OnInitListener</span> } <span style="color: #666666;">//</span> Set TTS engine <span style="color: green;">to</span> use default locale tts<span style="color: #666666;">.</span>language <span style="color: #666666;">=</span> defaultVoice<span style="color: #666666;">.</span>locale try { <span style="color: #666666;">//</span> Create a temporary file <span style="color: green;">to</span> synthesize sample text val tempFile <span style="color: #666666;">=</span> File<span style="color: #666666;">.</span>createTempFile(<span style="color: #ba2121;">"tmpsynthesize"</span>, null, applicationContext<span style="color: #666666;">.</span>cacheDir) <span style="color: #666666;">//</span> Synthesize sample text <span style="color: green;">to</span> our file tts<span style="color: #666666;">.</span>synthesizeToFile( <span style="color: #666666;">/*</span> text<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> <span style="color: #ba2121;">"1 2 3"</span>, <span style="color: #666666;">//</span> Some sample text <span style="color: #666666;">/*</span> params<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> null, <span style="color: #666666;">//</span> No params necessary <span style="color: green;">for</span> a sample request <span style="color: #666666;">/*</span> file<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> tempFile, <span style="color: #666666;">/*</span> utteranceId<span style="color: #666666;">=</span> <span style="color: #666666;">*/</span> <span style="color: #ba2121;">"sampletext"</span> ) <span style="color: #666666;">//</span> <span style="color: green;">And</span> clean up the file tempFile<span style="color: #666666;">.</span>deleteOnExit() } catch (e<span style="color: #666666;">:</span> Exception) { <span style="color: blue;">Log</span><span style="color: #666666;">.</span>e(TAG, <span style="color: #ba2121;">"Unhandled exception: "</span>, e) } } } tts <span style="color: #666666;">=</span> TextToSpeech(applicationContext, callback) } </pre></div> <p>When you are done using TTS, you can release the engine by calling <span style="color: #0d904f; font-family: Courier;">tts.shutdown()</span> in your activity’s <span style="color: #0d904f; font-family: Courier;">onDestroy()</span> method. This command should also be used when closing an app that TTS is used for.</p> <h3>Languages and Locales</h3> <p>By default, Wear OS TTS includes 7 pre-loaded languages in the system image: English, Spanish, French, Italian, German, Japanese, and Mandarin Chinese. OEMs may choose to preload a different set of languages. You can check what languages are available by using <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech#getAvailableLanguages%28%29" target="_blank">TextToSpeech#getAvailableLanguages()</a></span>. During watch setup, if the user selects a system language that is not a pre-loaded voice file, the watch automatically downloads the corresponding voice file the first time the user connects to Wi-Fi while charging their watch. </p> <p>There are limited cases where the speech output may differ from the user’s system language. For example, in a scenario where a safety app uses TTS to call emergency responders, developers might want to synthesize speech in the language of the locale the user is in, not in the language the user has their watch set to. To synthesize text in a different language from system settings, use <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech#setLanguage%28java.util.Locale%29" target="_blank">TextToSpeech#setLanguage(java.util.Locale)</a></span></p> <h3>Conclusion</h3> <p>Your Wear OS apps now have the power to talk, either directly <a href="https://developer.android.com/training/wearables/apps/audio" target="_blank">from the watch’s speakers or through Bluetooth</a> connected headphones. Learn more about <a href="https://developer.android.com/reference/android/speech/tts/TextToSpeech" target="_blank">using TTS</a>.</p> <p>We look forward to seeing how you use Text-to-speech engine to create more helpful and engaging experiences for your users on Wear OS!</p><p><br /></p> <div style="background: #f8f8f8; overflow:auto;width:auto;border:0;"><pre style="margin: 0; line-height: 125%">Copyright <span style="color: #666666">2023</span> Google LLC<span style="color: #666666">.</span> SPDX<span style="color: #666666">-</span>License<span style="color: #666666">-</span>Identifier<span style="color: #666666">:</span> Apache<span style="color: #666666">-2.0</span> </pre></div> Announcements Explore latest Platform Text-to-Speech Wear OS Android Developers Designing your account deletion experience with users in mind http://android-developers.googleblog.com/2024/03/designing-your-account-deletion-experience-google-play.html Android Developers Blog urn:uuid:685153eb-aa97-6a3c-2843-44c5aab18324 Wed, 06 Mar 2024 17:39:27 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhljLTe4e3m2lCTVHZukvwtt3N5A34tfp3uQ9kITH8m5EM-9FI-7752LR4HofGCVBUzc9aaTXmUEC_xrKJnNW1R4pzx9YCZMFxWDxF64PWv8Zg6Yai3XKNlDvRv_PjR8QE8gikqfChslevvcNF8SzPET1WNH-_thMq-svIuGSTQ5t_KrFoE-SUWok28Xhc/s1600/social-Account-Deletion-Case-Study-Blog.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhljLTe4e3m2lCTVHZukvwtt3N5A34tfp3uQ9kITH8m5EM-9FI-7752LR4HofGCVBUzc9aaTXmUEC_xrKJnNW1R4pzx9YCZMFxWDxF64PWv8Zg6Yai3XKNlDvRv_PjR8QE8gikqfChslevvcNF8SzPET1WNH-_thMq-svIuGSTQ5t_KrFoE-SUWok28Xhc/s1600/social-Account-Deletion-Case-Study-Blog.png" style="display: none;" /> <em>Posted by Tatiana van Maaren – Global T&amp;S Partnerships Lead, Privacy &amp; Security, May Smith - Product Manager, and Anita Issagholyan – Policy Lead</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg50WdOqNNKoMWD6WVzyUPnglOMkEDYqfzeToYuq8rKeYkm3AiqvYYgBC_gZbSKLImlxK8qyvp8tr5mMeK5Cfih1k6_uSTOmwXAczn8YkKzHWhAF8SVbkiv2m45JVHG2rDzIinPrGoyV7ujVT9Gze4sde0wVa_2-B8TvdCzPs3RRjKL5anNqxgJxRF5BcY/s1600/Play-Account-Deletion-Case-Study-Blog.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg50WdOqNNKoMWD6WVzyUPnglOMkEDYqfzeToYuq8rKeYkm3AiqvYYgBC_gZbSKLImlxK8qyvp8tr5mMeK5Cfih1k6_uSTOmwXAczn8YkKzHWhAF8SVbkiv2m45JVHG2rDzIinPrGoyV7ujVT9Gze4sde0wVa_2-B8TvdCzPs3RRjKL5anNqxgJxRF5BcY/s1600/Play-Account-Deletion-Case-Study-Blog.png" /></a> <p>With millions of developers relying on our platform, Google Play is committed to keeping our ecosystem safe for everyone. That’s why, in addition to our ongoing investments in app privacy and security, we also continuously update our policies to respond to new challenges and user expectations.</p> <p>For example, we recently introduced a <a href="https://android-developers.googleblog.com/2023/04/giving-people-more-control-over-their-data.html" target="_blank">new account deletion policy</a> with required disclosures within the Data Safety section on the Play Store. Deleting an account should be as easy as creating one, so the new policy requires developers to provide information and web resources that help users to manage their data and understand an app's deletion practices. </p> <p>To help you build trust and design a user-friendly experience that helps meet our policy requirements, consider these <b>5 best practices</b> when implementing your account deletion solution.</p> <h3>1. &nbsp;&nbsp; &nbsp;Make it seamless</h3> <p>Users prefer a simple and straightforward account deletion flow. Although users know that more steps may follow (such as authentication) navigating multiple screens before the deletion page can be a significant barrier and create negative feelings for the user. Consider providing your account deletion option on an account settings page or place a prominent button on the home screen. Design the flow with discoverability in mind by taking the user directly to the deletion process.</p> <h3>2. &nbsp;&nbsp; &nbsp;Allow automatic deletion</h3> <p>Users feel that if they can create an account without talking to a customer service agent, they should be able to delete their account online, too. If automation is not on your roadmap just yet, consider a step-by-step deletion request form or a dedicated page to connect users with customer support.</p> <h3>3. &nbsp;&nbsp; &nbsp;Offer guidance and explain potential implications</h3> <p>Users delete their accounts for various reasons, some of which may be better resolved another way. Early in your deletion flow, point your users toward a Help Center article that explains how your deletion process works in simple terms, including any potential consequences. For example, make it clear if your users will need to pause their payment method before deleting the account, or download any account data they want to keep. Helping your users understand the process in advance can prevent accidental deletions. For those who do change their minds, consider offering a way to recover their accounts within a reasonable timeframe. </p> <p>Here’s an example of how Play Store Developer, Canva, has designed the in-app deletion flow to explain potential consequences of account deletion:</p> <image><div style="text-align: center;"><img alt="user journey on the Canva app in three panels" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSmgP5HlDbudibZxpVZwLrzDcBnt2rg_ITmTLc2t_OFMIDPyLBzQJxeBfmyyp_nk1OL0Yd-pkQKiPFUqH0WyUbcDloblVhUOv6HcW-I0iNeTOghSLQjcQnVyqEFBEpXjqT5zDcIJUFnrcAEyh_-8Y2HxwW3sRCsP4glQPy03pBG40xhwC6G9qOClzmugk/s1600/Account-Deletion-Google-Play-inline%20%281%29.png" width="100%" /></div><imgcaption><center><em>User journey on the Canva app </em></center></imgcaption></image> <blockquote><span style="font-size: large;"><i>“User data privacy has always been important for us. We’ve always been intentional about our approach in optimizing the Canva app so our users can have more transparency and control over their data. We’re welcoming these new requirements from the Play store as we know this new flow will elevate users’ trust in our app and benefit our business in the long term.”&nbsp;</i></span><b>- Will Currie, Software Engineer, Canva</b></blockquote> <h3>4. &nbsp;&nbsp; &nbsp;Confirm account deletion </h3> <p>Sometimes users misunderstand whether the account itself or just data collected by the app was deleted in the deletion process. Users often think that the data your app stored in the cloud will automatically be deleted at the same time as account deletion. Since it may take time to remove account data from internal company systems or comply with data retention requirements in different regions, transparency about the process can help you maintain trust in your brand and make it more likely for users to return in the future.</p> <p>Here’s SYBO Games, has designed their web deletion in-app deletion flow:</p> <image><div style="text-align: center;"><img alt="user journey on the Sybo Games web resource in four panels" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi59KSA_oGI24P30Um9abe7fLhiYoTWKn5q8oJ2lDsKScf30Jq6GyC_ZAWCfCAYfwiGRD4jdN4n5KCCXFH7L-zdCY7efdN96HhsuTmOFvQNUw5l75QoLBa43i_LPo5ph1-W64y3fTSKRXFMLIy8TeFWa-pY-qjpX-0j9Tg0mroJcxc56ZFAmRjH06kvKCE/s1600/Account-Deletion-Google-Play-inline-2.png" width="100%" /></div><imgcaption><center><em>User journey on the SYBO Games web resource </em></center></imgcaption></image> <blockquote><span style="font-size: large;"><i>“We are always striving to ensure that our games provide a fun user experience, built on a solid data protection foundation. When we learned about the new account deletion update on Google Play, we thought this was a great step forward to ensure that the entire developer ecosystem optimizes for user safety. We encourage developers to carve out time to embrace these improvements and prioritize regular privacy check-ins.” &nbsp;</i></span><b>- Elizabeth Ann Schweitzer, Games Compliance Manager, SYBO Games</b></blockquote> <h3>5. &nbsp;&nbsp; &nbsp;Don’t forget user engagement</h3> <p>This is a great opportunity to connect with your users at a critical moment. Make sure users who have uninstalled your app can easily remove their accounts through a web resource without needing to reinstall the app. You can also invite them to complete a survey or provide feedback on their decision.</p> <p>Protecting users' data is essential for building trust and loyalty. By updating the Data Safety section on Google Play and continuing to optimize user experience for account deletion, you can strengthen trust in your company while striving for the highest level of user data protection.</p><br /> <p>Thank you for your continued collaboration and feedback in developing this data transparency feature and in helping make Google Play safe for all.</p> android developers Best Practices Featured Games Google Play Android Developers Embracing Android 14: Meta's Early Adoption Empowered Enhanced User Experience http://android-developers.googleblog.com/2024/03/android-14-meta-early-adoption-enhanced-user-experience.html Android Developers Blog urn:uuid:7394fe7b-5d98-246f-5964-22007c32b9a9 Mon, 04 Mar 2024 22:00:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png" style="display: none;" /> <em>Posted by Terence Zhang – Developer Relations Engineer, Google; in partnership with Tina Ho - Partner Engineering, TPM and Kun Wang – Partner Engineering, Partner Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW5n06FoVE-2EYCtpdVDhyphenhyphenTnQY6uxTLFwcX4ulmQ6OmzdgLDu500sWA8CPjM36tDpjiSCFJDsQ4fslD8InyzLPi4Tsin0zintvb4cfZbtK7WMb3BV9qXenxgSXsemkZwYkUCGOCanhUbJWMfErr-meqQ5Oo7eae1H4KC_cSh5XRngvHG3Hk6LDM0z4zOg/s1600/AndroidDev_MetaRelease__V4.png" /></a> <p>With the first <a href="https://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html" target="_blank">Developer Preview of Android 15</a> now released, another new Android release that brings new features and under-the-hood improvements for billions of users worldwide will be coming shortly. As Android developers, you are key players in this evolution; by staying on top of the <a href="https://support.google.com/googleplay/android-developer/answer/11926878" target="_blank">targetSDK upgrade cycle</a>, you are making sure that your users have the best possible experience.</p> <p>The way Meta, the parent company of Instagram, Facebook, WhatsApp, and Messenger, approached Android 14 provides a blueprint for both developer success and user satisfaction. <b>Meta improved their velocity towards targetSDK adoption by 4x</b>, and so to understand more about how they built this, we spoke to the team at Meta, with an eye towards insights that all developers could build into their testing programs.</p> <h3>Meta’s journey on A14: A blueprint for faster adoption</h3> <p>When Android 11 launched, some of Meta’s apps experienced challenges with existing features, such as Chat Heads, and with new requirements, like scoped storage integration. Fixing these issues was complicated by slow developer tooling adoption and a decentralized app strategy. This experience motivated Meta to create an internal Android OS Readiness Program which focuses on prioritizing early and thorough testing throughout the Android release window and accelerating their apps’ targetSDK adoption.</p> <p>The program officially launched last year. By compiling apps against each Android 14 beta and conducting thorough automated and smoke tests to proactively identify potential issues, Meta was able to seamlessly adopt new Android 14 features, like Foreground Service types <a href="https://issuetracker.google.com/" target="_blank">and send timely feedback and bug reports to the Android team</a>, contributing to improvements in the OS.</p> <p>Meta also accelerated their targetSDK adoption for Android 14—updating Messenger, Facebook, and Instagram within one to two months of the AOSP release, compared to seven to nine months for Android 12 (<b>an increase of velocity of more than 4x!</b>). Meta’s newly created readiness program unlocked this achievement by working across each app to adopt latest Android changes while still maintaining compatibility. For example, by automating and simplifying their SDK release process, Meta was able to cut rollout time from three weeks to under three hours, enhancing cooperation between individual app teams by providing immediate access to the latest SDKs and allowing for rapid testing of new OS features. The centralized approach also meant Threads adopted Android 14 support quickly despite the fast-growing new app being supported by a minimal team. </p> <h3>Reaping the rewards: The impact on users</h3> <p>Meta's early targetSDK adoption strategy delivers significant benefits for users as well. Here's how:</p> <ul style="text-align: left;"><ul> <li><b>Improved reliability and compatibility:</b> Early adoption of Android previews and betas prevented surprises near the OS launch, guaranteeing a smooth day-one experience for users upgrading to the latest Android version. For example, with partial media permissions, Meta's extensive experimentation with permission flows ensured “users felt informed about the change and in control over their privacy settings,” while maximizing the app's media-sharing functionality.</li></ul></ul><br /><ul style="text-align: left;"><ul> <li><b>Robust experimentation with new release features:</b> Early Android release adoption gave Meta ample time to collaborate across privacy, design, and content strategy teams, enabling them to thoughtfully integrate the new Android features that come with every release. This enhanced the collaboration on other features, allowing Meta to roll out <a href="https://source.android.com/docs/core/camera/ultra-hdr" target="_blank">Ultra HDR</a> image experience on Instagram within 3 months of platform release in an “Android first” manner is a great example of this, delighting users with brighter and richer colors with a higher dynamic range in their Instagram posts and stories.</li> </ul></ul> <image><div style="text-align: center;"><img alt="Meta's adoption of Ultra HDR in Android 14 brings brighter colors and dynamic range to Instagram posts and stories." border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYrW_yI6CcPjUcSgGaaDZ_784bCOcnub8cMzP48Wtj3MpT4n97ylqg67oyE_hNJh-buxbXstd8Q7HWPoNv_bF6eCor0_hpfeCAnlENTik0MRc8WhT44c9FtYcGu63PK01gSdxbBQ21CeeDm_ndcsmENgl66U6OftpGg0cuOePeZSaaCUd2XUeBKrcA15E/s1600/image2.png" width="100%" /></div><imgcaption><center><em>Meta's adoption of Ultra HDR in Android 14 brings brighter colors and dynamic range to Instagram posts and stories.</em></center></imgcaption></image><br /> <h3>Embrace the latest Android versions</h3> <p>Meta's journey highlights the compelling reasons for Android developers to adopt a similar forward-thinking mindset in working with the Android betas:</p> <ul style="text-align: left;"><ul> <li><b>Test your apps early:</b> Anticipate Android OS changes, ensuring your apps are prepared for the latest target SDK as soon as they become available to create a seamless transition for users who update to the newest Android version. </li></ul></ul><br /><ul style="text-align: left;"><ul> <li><b>Utilize latest tools to optimize user experience:</b> Test your apps thoroughly against each beta to identify and address any potential issues. Check the Android Studio Upgrade Assistant to highlight major breaking changes in each targetSDKVersion, and integrate the <a href="https://developer.android.com/about/versions/14/reference/compat-framework-changes" target="_blank">compatibility framework</a> tool into your testing process to help uncover potential app issues in the new OS version. </li></ul></ul><br /><ul style="text-align: left;"><ul> <li><b>Collaborate with Google:</b> Provide your valuable feedback and bug reports using the <a href="https://issuetracker.google.com/" target="_blank">Google issue tracker</a> to contribute directly to the improvement of the Android ecosystem.</li> </ul></ul> <p>We encourage you to take full advantage of the Android Developer Previews &amp; Betas program, starting with the newly-released <a href="https://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html" target="_blank">Android 15 Developer Preview 1</a>. </p> <h3>The team behind the success</h3> <p>A big thank you to the entire Meta team for their collaboration in Android 14 and in writing this blog! We’d especially like to recognize the following folks from Meta for their outstanding contributions in establishing a culture of early adoption:</p> <ul><ul> <li>Tushar Varshney - Partner Engineering, Partner Engineer</li> <li>Allen Bae - Partner Engineering, EM</li> <li>Abel Del Pino - Facebook, SWE</li> <li>Matias Hanco - Facebook, SWE</li> <li>Summer Kitahara - Instagram, SWE</li> <li>Tom Rozanski - Messenger, SWE</li> <li>Ashish Gupta - WhatsApp, SWE</li> <li>Daniel Hill - Mobile Infra, SWE</li> <li>Jason Tang - Facebook, SWE</li> <li>Jane Li - Meta Quest, SWE</li> </ul></ul> Android 14 Android betas Android release case study Meta mobile Solve Web Android Developers Android Studio Iguana is stable http://android-developers.googleblog.com/2024/02/android-studio-iguana-is-stable.html Android Developers Blog urn:uuid:75fd96a3-99aa-0a1b-5d21-ca714d2019c7 Thu, 29 Feb 2024 18:42:40 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png" style="display: none;" /> <em>Posted by Neville Sicard-Gregory – Senior Product Manager, Android Studio</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMLW97x07fxQ0CLacNwpF1EkzVmEqrWeOIGWk1c8lkQ19okJMVRcjLDCOzacz4wkJG3gMS4Ot-m1qoDIzfQbhTH-dGtq5jkkv8QGLUc2uvAvfCSSaJWxg7zLrRL5NndmJ6-g1hwiH4PcFJPZqMnID3atks9uKYBzVq7GkQODb8co9XZIEQf06xApzqYX4/s1600/Android-Studio-Iguana-SOCIAL.png" /></a> <p>Today we are launching <a href="https://developer.android.com/studio" target="_blank">Android Studio Iguana</a> Android Android Emulator Android Studio Android Studio Emulator Android Studio Iguana androidstudio Baseline Profiles Compose Featured Pixel Fold AVD Pixel Tablet AVD Android Developers New goodies from Android, Wearables at Mobile World Congress + tune in to a new episode of #TheAndroidShow next week! http://android-developers.googleblog.com/2024/02/tas-teaser.html Android Developers Blog urn:uuid:78913bd5-c1a4-6e4e-d8a7-91adbe13db2d Mon, 26 Feb 2024 21:27:33 +0000 <meta name="twitter:image" content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI0RiyyrPaaVPxXBOu8d8y9wAUWn_45S30v6PSfecI6OKJNKDWdm6gsiLK_14cxBUXhlnk67rK358EWhqvVABQqRVcjKo6iYmP9uPeNBAC3pdSQlMkNoit8dpmSxiymkqleXSeWNqB_q0upzqPX-waFeELV1B7JlaWGXvHqnEUfKaV-QxfGfvS8lIwjNQ/s1600/TAS-Social-Q1-AD.png"> <img style="display:none" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI0RiyyrPaaVPxXBOu8d8y9wAUWn_45S30v6PSfecI6OKJNKDWdm6gsiLK_14cxBUXhlnk67rK358EWhqvVABQqRVcjKo6iYmP9uPeNBAC3pdSQlMkNoit8dpmSxiymkqleXSeWNqB_q0upzqPX-waFeELV1B7JlaWGXvHqnEUfKaV-QxfGfvS8lIwjNQ/s1600/TAS-Social-Q1-AD.png"> <em>Posted by Anirudh Dewani, Director of Android Developer Relations</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcej6RGlKIMCO01jywpjhx06BwCX4H99IxkpeZ-kOYOky0wayXs55BenCgg51d03jwUNyWIa3LqfHqfzZew9kj7o4o8x0QilXkmvOVILoz9V8EpMg0Tw1diGmgmIfNS3nAyTtNpjWEHQqToRo2qWHpaQvPVX4yhEz_kzARdB-F-YglL3jIeAgtDTjBY8/s1600/image%20%285%29.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPcej6RGlKIMCO01jywpjhx06BwCX4H99IxkpeZ-kOYOky0wayXs55BenCgg51d03jwUNyWIa3LqfHqfzZew9kj7o4o8x0QilXkmvOVILoz9V8EpMg0Tw1diGmgmIfNS3nAyTtNpjWEHQqToRo2qWHpaQvPVX4yhEz_kzARdB-F-YglL3jIeAgtDTjBY8/s1600/image%20%285%29.png" /></a> <p>Earlier today, at Mobile World Congress (MWC), an annual conference showcasing the latest in mobile, Android and our partners unveiled a range of new goodies, including new wearables, foldables, as well as a number of new features for Android users. Keep reading below to see how you, as developers, can take advantage of these new features and devices that are being released. And in just over a week, on Thursday March 7 at 10AM PT, we’ll be kicking off another episode of #TheAndroidShow, our quarterly live show on YouTube and on <a href="http://developer.android.com/events/show" target="_blank">developer.android.com</a>, where we’ll dive more into these topics.</p> <iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="3D4k2z8Wmw0" width="100%" height="413" src="https://www.youtube.com/embed/3D4k2z8Wmw0"></iframe><br/> <h3>Meet the new watch from OnePlus and how we’re boosting power with the Wear OS hybrid interface</h3> <p>Wearables are on display across MWC this week, and one of our favorites is OnePlus Watch 2, powered with the latest version of Wear OS (<a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">Wear OS 4</a>). As part of our ongoing work to improve the <a href="https://wearos.google.com/" target="_blank">Wear OS by Google</a> user experience, we’ve made fundamental changes to the platform and substantially expanded the capabilities of the Wear OS hybrid interface that improve two key areas: power and performance. As a developer, you can leverage existing Wear OS APIs to get underneath optimizations without any added effort – no code changes required! <a href="https://android-developers.googleblog.com/2024/02/wear-os-hybrid-interface-boosting-power-and-performance.html " target="_blank">You can read more about the updates here.</a> </p> <image><div style="text-align: center;"><img alt="Images of three people wearing the OnePlus Watch 2" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY2MRgmDxsZC8Tni50uvlDqwljNbb4WyRSEHDbE4PsY_-0BL-P0W49r7v6TMX8gH39BxcjRaPNr2ZdYhbHF9vkopYBMLPE2BSmr_Nq2bC60P3hRkiNeZMgbZSyazYw5vUXprwD3sJQswKcsqzLTXv-HK-F6o-Bax9qNYmE5mNUPNLqw774no8nK4r7X7U/s1600/Oneplus_social.png" width="100%" /></div></image><br /> <h3>A few new features for Android users</h3> <p>Google released 9 new features Android users can take advantage of across Google apps, you can <a href="https://blog.google/products/android/new-android-features-february-2024" target="_blank">read more about those features here</a>. For developers, we wanted to highlight a few ways you can take advantage of this news across experiences you build into your apps:</p> <ul style="text-align: left;"><ul> <li><b>More places for users to see their Health Connect data, now in the Fitbit app:</b> With permission from your users, <a href="https://developer.android.com/health-and-fitness/guides/health-connect" target="_blank">Health Connect</a> is a central way to connect and sync their favorite health and fitness apps, see all their data in one place, and stay in control of their privacy. By setting up Health Connect in the Fitbit mobile app for Android, users will have an overview of their health and fitness data from across their apps in one place. You can <a href="https://android-developers.googleblog.com/2023/08/health-connect-brings-together-peloton-oura-lifesum-for-deeper-health-and-fitness-insights.html" target="_blank">join developers like Peloton, ŌURA, and Lifesum</a> who are using Health Connect to provide their users with deeper health and fitness insights, <a href="https://developer.android.com/health-and-fitness/guides/health-connect" target="_blank">get started now</a>!</li></ul></ul><ul style="text-align: left;"><ul> <li><b>Add Stylus support, like Google Docs did: </b> With Google Docs markups, you can <a href="https://www.android.com/new-features-on-android/?feature=google-docs-markups&amp;utm_source=blog&amp;utm_medium=owned&amp;utm_campaign=y24q1spotlight/#gms-filter" target="_blank">add handwritten annotations to Docs</a> from your Android phone or tablet using just your finger or stylus. Google Docs took advantage of stylus support; <a href="https://developer.android.com/guide/topics/large-screens/support-advanced-stylus-features" target="_blank"> you can learn more about adding support for Stylus here</a>.</li></ul></ul><ul style="text-align: left;"><ul> <li><b>Use Tiles for Wear OS, like Google Maps did:</b> With <a href="https://www.android.com/new-features-on-android/?feature=transit-directions-on-google-maps-for-wear-os&utm_source=blog&utm_medium=owned&utm_campaign=y24q1spotlight/#gms-filter" target="_blank">public transit directions on Google Maps for Wear OS</a>, you can leave your phone in your pocket and glance at your wrist to make sure you catch your bus, train or ferry. Users can see these public transit directions through Google Maps use of <a href="https://developer.android.com/design/ui/wear/guides/surfaces/tiles" target="_blank">Tiles</a> which provide quick access to the information and actions users need to get things done. <a href="https://developer.android.com/training/wearables/tiles" target="_blank">You can learn more about building a Tile for your app here</a>.</li> </ul></ul> <image><div style="text-align: center;"><img alt="Image that reads 'New updates on Android' with pictures of a smart watch, laptop, and Android Auto" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY6auQvdiAc77ulf-KnhpPWzh43OHJp9xTds7BPw8HWrf_SrGOCJ_45AAV8ABdQzgD4ooHD4z7XT41DTaXivXAAO9MDHmjuIvDnfW5UoQ48_gRaJMtd6SB1uzEzqdmVRrsavcmH1Asot1ob9EgqKXtLbRMxIf5axHi5AIQofNgTc5pv9QLmdzNCuPPvZM/s1600/image2.jpg" width="100%" /></div></image> <h2><span style="font-size: x-large;">A new episode of #TheAndroidShow, live on March 7 at 10AM PT. Send us your #AskAndroid questions now! </span></h2> <p>You can join us on March 7 at 10AM PT for a new episode of <b>#TheAndroidShow.</b> In this quarterly show, we’ll unpack the latest Android foldables and large screens for you to get building on, plus a behind-the-scenes on Gemini Nano and AICore.</p> <p>We’ll have a live #AskAndroid Q&amp;A with the team about building Android; you can ask us about building excellent apps across devices, Android 15, Compose, Gemini and more, using #AskAndroid on X or on YouTube. Our experts are ready to answer your questions live!</p> <p><b>#TheAndroidShow: March 7 at 10AM PT</b>, broadcast live on YouTube and <a href="d.android.com/events/show" target="_blank">d.android.com/events/show</a>!</p> #TheAndroidShow #JetpackCompose Android UI Announcements Explore Jetpack Compose mobile Web Android Developers Wear OS hybrid interface: Boosting power and performance http://android-developers.googleblog.com/2024/02/wear-os-hybrid-interface-boosting-power-and-performance.html Android Developers Blog urn:uuid:8b58a8d2-1ae6-42db-7a02-bef78fd45a8b Mon, 26 Feb 2024 15:46:20 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmm4lj8twpvPFOe835BVS8ODXRQe300l72XMYE-oW50Ce79FGpaa9UHCtGcnhi_GZcsUCsVrbsy2mp3uVV5GPH7BRATgh-t4ZnmkG_PVICWha2ilkXy5k0O256wwlEby3PDLB-u6qKB3nyV6rtXurwlfUQqvKyQaotUso_E-Z15ql3xcuJml625jwR6PA/s1600/WearOS-OnePlus-AD-Social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmm4lj8twpvPFOe835BVS8ODXRQe300l72XMYE-oW50Ce79FGpaa9UHCtGcnhi_GZcsUCsVrbsy2mp3uVV5GPH7BRATgh-t4ZnmkG_PVICWha2ilkXy5k0O256wwlEby3PDLB-u6qKB3nyV6rtXurwlfUQqvKyQaotUso_E-Z15ql3xcuJml625jwR6PA/s1600/WearOS-OnePlus-AD-Social.png" style="display: none;" /> <em>Posted by <a href="https://twitter.com/kseniiaS" target="_blank">Kseniia Shumelchyk</a>, Android Developer Relations Engineer</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOORsnGuE8R2oK8MeCeUegCvo3kCWraitp4mtBuyoXY9Y33cuHBJiF0JEBpipOSPLBsfyvtxC8rFdV-pxsQwX00xmE3jszlI68QLgauapkYOt_4wZdotYsITlgTehohAawtmuSOadMsnDHtv8b7fHcqADtmqo21_j0rCuih20mNd6srIEq_tKa3mTEY0I/s1600/Oneplus_blogheader.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOORsnGuE8R2oK8MeCeUegCvo3kCWraitp4mtBuyoXY9Y33cuHBJiF0JEBpipOSPLBsfyvtxC8rFdV-pxsQwX00xmE3jszlI68QLgauapkYOt_4wZdotYsITlgTehohAawtmuSOadMsnDHtv8b7fHcqADtmqo21_j0rCuih20mNd6srIEq_tKa3mTEY0I/s1600/Oneplus_blogheader.png" /></a> <p>In collaboration with our hardware partners, we’ve continued to prioritize the <a href="https://wearos.google.com/" target="_blank">Wear OS</a> by Google user experience. As such, we’ve made fundamental design changes to the platform and substantially expanded the capabilities of the Wear OS hybrid interface that improve two key areas: power and performance.</p> <p>With <a href="https://www.prnewswire.com/news-releases/introducing-oneplus-watch-2-a-dual-engine-flagship-smartwatch-powered-with-wear-os-by-google-302070328.html#:~:text=DALLAS%2C%20Feb.%2026%2C%202024,%E2%84%A2%20%28Wear%20OS%204%29" target="_blank">OnePlus Watch 2</a>, powered with the latest version of Wear OS (<a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">Wear OS 4</a>), the dual-chipset architecture works with our hybrid interface to get both chips to work better in tandem. This enables even more use cases to benefit from dramatically extended battery life of up to 100 hours of regular use with all functionalities accessible in Smart Mode.</p> <p>Together, we’ve created a premium smartwatch experience that doesn’t compromise the advanced feature set or battery life. In this post, we’ll share how you can benefit from these changes when building experiences for Wear OS.</p> <h2><span style="font-size: x-large;">On the edge of innovation: redesigned smartwatch architecture</span></h2> <p>Wear OS smartwatches have a dual-chipset architecture inclusive of a powerful application processor (AP) and ultra low-power co-processor microcontroller unit (MCU). The architecture has a powerful AP capable of handling complex operations en-masse, and is seamlessly coupled with a low power MCU.</p> <p>The Wear OS hybrid interface enables intelligent switching between the MCU or the AP, allowing the AP to be suspended when not needed to preserve battery life. It helps, for instance, achieve more power-efficient experiences, like sensor data processing on the MCU while the AP is asleep. At the same time, the hybrid interface provides a seamless transition between these states, keeping a rich and premium user experience without jarring transitions between power modes.</p> <image><div style="text-align: center;"><img alt="ALT TEXT" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSSIa-_v9BKX-IzB2JLfd6Bz8CL3cQDm2ka_DXn8DPR92iM463UzNbpgWaVno3FJwPildLcdvFM83cAyCBjxRmhtM48nWFv7XzDPQFi5rFhfZCoJOM-pxxcTQ6VcXKy1VIR8kig880mWHhQtiPYQ6kKgY90Hkgg2eQ6Zrk3xKOMYPI_i0vCbxglUVx3LU/s1600/image2.gif" width="100%" /></div></image><br /> <h3 style="text-align: left;"><span style="font-size: large;">Connectivity and notification experience</span></h3> <p>To enhance connectivity-reliant interactions like notifications and phone calls, OnePlus utilized platform capabilities with the notification API in the hybrid interface, enabling the MCU to process regular notification experiences and reduce the need to activate the AP.</p> <p>For example, <a href="https://developer.android.com/training/wearables/notifications" target="_blank">bridged notifications</a> will be delivered to the watch without waking up the high-performance AP. Users can read and dismiss these notifications while the watch is still powered by the MCU. The MCU can also handle wearable-specific actions in notifications, such as quick replies or remote actions.</p> <h2><span style="font-size: x-large;">What this means for development</span></h2> <p>You can leverage existing Wear OS APIs to get these optimizations without any added effort – no code changes required!</p> <h3 style="text-align: left;"><span style="font-size: large;">Notifications</span></h3> <p>The notification hybrid interface enables seamless transitions between power modes to work with the Wear OS notification stack. You get the best notification performance by using the <a href="https://developer.android.com/training/wearables/notifications?_gl=1*9dlcvi*_up*MQ..*_ga*NjY5MzY0MTMzLjE3MDc3ODEwMzU.*_ga_6HH9YJMN9M*MTcwNzc4MTAzNC4xLjAuMTcwNzc4MTAzNC4wLjAuMA..#add-wearable-features" target="_blank">Notification API</a>.</p> <h3 style="text-align: left;"><span style="font-size: large;">Health &amp; Fitness experiences</span></h3> <p>The Wear OS hybrid interface also elevates the fitness experience with more precise workout tracking, automatic sports recognition and smarter health data monitoring. All of these can be offered to users without compromising battery life.</p> <p>Starting with Wear OS 3, developers use <a href="https://developer.android.com/health-and-fitness/guides/health-services" target="_blank">Health Services on Wear OS</a> to gain access to sensor data. The health hybrid interface works under the hood to enable power optimizations by batching sensor data on the MCU and periodically updating developer apps through the Health Services API on the AP.</p> <h3 style="text-align: left;"><span style="font-size: large;">Watch Faces</span></h3> <p>With Wear OS 4, we launched the <a href="https://android-developers.googleblog.com/2023/05/introducing-watch-face-format-for-wear-os.html" target="_blank">Watch Face Format</a>, a declarative XML format to create customizable and power-efficient watch faces.</p> <p>The platform has created capabilities to implement Watch Face Format rendering on the MCU, so using the new format helps future-proof certain watch faces to take advantage of emerging optimizations in future devices for better battery usage.</p> <p>Check out the <a href="https://developer.android.com/training/wearables/wff" target="_blank">watch face format</a> documentation and <a href="https://developer.android.com/design/ui/wear/guides/surfaces/watch-faces" target="_blank">design guidelines</a> for Wear OS watch faces.</p> <h2><span style="font-size: x-large;">Expand your reach with Wear OS</span></h2> <p>With the additions to the Wear OS smartwatch ecosystem and expanded device capabilities, it's an ideal time to build experiences for smartwatches that can reach more users and benefit your business.</p> <p>To begin developing apps for Wear OS, try our <a href="https://developer.android.com/codelabs/compose-for-wear-os" target="_blank">Compose for Wear OS codelab</a>, and check out the <a href="http://d.android.com/wear" target="_blank">documentation</a> and <a href="https://github.com/android/wear-os-samples" target="_blank">samples</a>.</p> <p>Read more about <a href="https://android-developers.googleblog.com/2023/10/wear-os-4-is-now-stable-and-available-on-google-pixel-watch-2.html" target="_blank">developer updates in Wear OS 4</a>, and how you can get your apps ready for the latest Wear OS watches.</p> <p>We can’t wait to see what experiences you’ll build!</p> announcement Explore Featured Hybrid Interface OnePlus Wear OS Android Developers Easily add document scanning capability to your app with ML Kit Document Scanner API http://android-developers.googleblog.com/2024/02/ml-kit-document-scanner-api.html Android Developers Blog urn:uuid:ea31f16d-8c4f-c5a7-5690-c5a8078edfa8 Thu, 22 Feb 2024 17:00:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9szIo2TBAryM51OQHMHjvoJRkwMs2Pa3NXmFxmZrWGdLC2c83LgSXwlf2MypoXN2IBz_3SOS-HQQqKDRAWYfWDmHeNyGl5KUaFkkJeEpKLA2NIX8Vtvrt7pnUdfDDTg6ZmOLfmhQKIldp9v96yadQnUa2r8fZUS6N2t9zPCPJNZteai33hPjUKq6z23k/s1600/a_new_foundtion_editorial-social.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9szIo2TBAryM51OQHMHjvoJRkwMs2Pa3NXmFxmZrWGdLC2c83LgSXwlf2MypoXN2IBz_3SOS-HQQqKDRAWYfWDmHeNyGl5KUaFkkJeEpKLA2NIX8Vtvrt7pnUdfDDTg6ZmOLfmhQKIldp9v96yadQnUa2r8fZUS6N2t9zPCPJNZteai33hPjUKq6z23k/s1600/a_new_foundtion_editorial-social.png" style="display: none;" /> <em>Posted by Thomas Ezan – Sr. Developer Relations Engineer; Chengji Yan, Penny Li – ML Kit Engineers; David Miro Llopis – Product Manager</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm1t-9xVtRVMAjnjo5Ji5Mpx9qcqcJgdeeEOpfOB4AtYrktrF6MhoMMC8VlPKhNxF0mT-D3GA8Ja8ig0KiYnV6bZRInjHxJbkbM1sOinK5SqmJGqeWWHUxYkJ-oB8iorE9-X4MVJUaYMTEn-FycA27R4eFcA2HaUKABbP5zJbWSnCNWPVQzJZkQAqBqeI/s1600/a_new_foundtion_editorial_header.png"><img border="0" data-original-height="800" data-original-width="1058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm1t-9xVtRVMAjnjo5Ji5Mpx9qcqcJgdeeEOpfOB4AtYrktrF6MhoMMC8VlPKhNxF0mT-D3GA8Ja8ig0KiYnV6bZRInjHxJbkbM1sOinK5SqmJGqeWWHUxYkJ-oB8iorE9-X4MVJUaYMTEn-FycA27R4eFcA2HaUKABbP5zJbWSnCNWPVQzJZkQAqBqeI/s1600/a_new_foundtion_editorial_header.png" /></a> <p>We are excited to announce the launch of the <a href="https://developers.google.com/ml-kit/vision/doc-scanner" target="_blank">ML Kit Document Scanner API</a>. This new API makes it easy to add advanced document scanning capabilities with a high-quality and consistent user interface to your Android app. The ML Kit Document Scanner API enables your users to quickly and easily digitize paper documents.</p> <p>Like the other ML Kit APIs, the ML Kit Document Scanner API enables you to seamlessly integrate features powered by Machine Learning (ML) without any ML knowledge.</p> <image><div style="text-align: center;"><img alt="ml kit document scanner illustration" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3HKj8jUfxGqQIjF_4IdTi5FHiFqJ0Lh-SZmVLV62K08SunYqiT13hozvG4x6Rkf2gF8IhMdp7a6ZzGUT_iObDSJzVXkuIbAD_PD9Yb2uBCnqWPQE6VNEj7wpqHkzCeVW7jN4fNi0spo3Tx0EV2V-rxlC_5GrlegWEzIeGEDq024Dir8LPCia8s4vctnE/s1600/image4.png" width="100%" /></div></image> <h3>Why Document Scanner SDK?</h3> <p>Despite the digital revolution, paper documents and printouts are still present in our everyday life. Some of our most important documents are still physical (identity documents, receipts, etc.).</p> <p>The ML Kit Document Scanner API offers a number of benefits, including:</p> <ul><ul> <li>A high-quality and consistent user interface for digitizing physical documents.</li> <li>Accurate document detection with precise corner and edge detection for a seamless scanning experience and optimal scanning results.</li> <li>Flexible functionality allows users to crop scanned documents, apply filters, remove fingers, remove stains and other blemishes and send digitized files in PDF and JPEG formats back to your app.</li> <li>On-device processing helps preserve privacy.</li> <li>A complete solution eliminating the need for camera permission.</li> </ul></ul> <p>The ML Kit Document Scanner API is already used by Google Drive Android application and the Google Pixel Camera.</p> <image><div style="text-align: center;"><img alt="moving image showing ML Kit Document scanner API in action in Google Drive" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtQtiEsIs_LrwPwkt6LoySSeA9sEjbBraOfzsFlLEBi1OdCyeR7JJjH42KtkiaawCdBpAXEG_BgokdO4kE2iptk9TCgpC5ld8FURaEjqpu32tlROVDZbjRtgK3biAsSnrobbvAGJSJ2bJYH8h9uj6Y-zx1aJPRI8-fIaKv5Cgaco3Q5JBdZAGbcIL6ztY/s1600/docscan_demo.gif" width="50%" /></div><imgcaption><center><em>ML Kit Document scanner API in action in Google Drive</em></center></imgcaption></image> <h3>Get started</h3> <p>The ML Kit Document Scanner API requires Android API level 21 or above. The models, scanning logic, and UI flow are dynamically downloaded via Google Play services so the ML Kit Document Scanner API has a minimal impact on your app size.</p> <p>To integrate it in your app, start by configuring the scanner options and getting a scanner client:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">val options <span style="color: #666666;">=</span> GmsDocumentScannerOptions<span style="color: #666666;">.</span>Builder() <span style="color: #666666;">.</span>setGalleryImportAllowed(false) <span style="color: #666666;">.</span>setPageLimit(<span style="color: #666666;">2</span>) <span style="color: #666666;">.</span>setResultFormats(RESULT_FORMAT_JPEG, RESULT_FORMAT_PDF) <span style="color: #666666;">.</span>setScannerMode(SCANNER_MODE_FULL) <span style="color: #666666;">.</span>build() val scanner <span style="color: #666666;">=</span> GmsDocumentScanning<span style="color: #666666;">.</span>getClient(options)</span> </pre></div> <p>Then register an <span style="color: #0d904f; font-family: Courier;">ActivityResultCallback</span> to receive the scanning results:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">val scannerLauncher <span>=</span> registerForActivityResult(StartIntentSenderForResult()) { result <span>-&gt;</span> { <span>if</span> (result<span>.</span>resultCode <span>==</span> RESULT_OK) { val result <span>=</span> GmsDocumentScanningResult<span>.</span>fromActivityResultIntent(result<span>.</span>data) result<span>.</span>getPages()<span>?.</span>let { pages <span>-&gt;</span> <span>for</span> (page in pages) { val imageUri <span>=</span> page<span>.</span>getImageUri() } } result<span>.</span>getPdf()<span>?.</span>let { pdf <span>-&gt;</span> val pdfUri <span>=</span> pdf<span>.</span>getUri() val pageCount <span>=</span> pdf<span>.</span>getPageCount() } } } }</span> </pre></div> <p>Finally launch the document scanner activity:</p> <div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">scanner<span>.</span>getStartScanIntent(activity) <span>.</span>addOnSuccessListener { intentSender <span>-&gt;</span> scannescannerrLauncher<span>.</span>launch(IntentSenderRequest<span>.</span>Builder(intentSender)<span>.</span>build()) } <span>.</span>addOnFailureListener { <span>...</span> } </span></pre></div> <p>To get started with the ML Kit Document Scanner API, visit the <a href="https://developers.google.com/ml-kit/vision/doc-scanner" target="_blank">documentation</a>. We can’t wait to see what you’ll build with it!</p> AI Developer Tools Learn machine learning Release Notes Android Developers The First Developer Preview of Android 15 http://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html Android Developers Blog urn:uuid:fc796ace-2479-62fa-8d1f-e4dd345a85e4 Fri, 16 Feb 2024 19:01:28 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDDCgXcu5EI9w514aJNVe4C1CciGCHkKn8lWUyaa_TK-HspfRAKoKvDAiMTbGZ-Y406y9W5sn4y-SEyGFiwbNlS7EScaVTMgSOVhuq2kUBwoaMX0KqdYSIdGRHfI7zpi7nm5ciPZVlS2cdTOb_xEeWVma4KVdGt2T2DmvkNFTIuWqFpgx8Fe5maN9TCPI/s1600/Android-15-DP1-Social%20%281%29.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDDCgXcu5EI9w514aJNVe4C1CciGCHkKn8lWUyaa_TK-HspfRAKoKvDAiMTbGZ-Y406y9W5sn4y-SEyGFiwbNlS7EScaVTMgSOVhuq2kUBwoaMX0KqdYSIdGRHfI7zpi7nm5ciPZVlS2cdTOb_xEeWVma4KVdGt2T2DmvkNFTIuWqFpgx8Fe5maN9TCPI/s1600/Android-15-DP1-Social%20%281%29.png" style="display: none;" /> <em> Posted by <a href="https://twitter.com/davey_burke" target="_blank">Dave Burke</a>, VP of Engineering </em> <div class="separator" style="border: 0px; clear: both; float: right; padding: 0px; width: 45%;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Android 14 logo" border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX98TKIsaJF7D4wnq7YBOuMjtYH-6D5Kgm7m7VbRek7cQIGN7TNVtJMDIbSiEG5KgcGyGpgGxEOz7u9v-WhQASrQrjvCQF8-RQ7PsZpA6djqK7RA7mXrnt6aYiac8voLef_mhP-s_TucPVEP1vvmUBjspmjA2RdrbvIqVwYXQJZ1fwPyamJIxXTrgMVmg/s1600/image1.png" width="320" /></a></div> <p>We're releasing the first Developer Preview of Android 15 today so you, our developers, can collaborate with us to build a better Android.</p> <p>Android 15 continues our work to build a platform that helps improve your productivity while giving you new capabilities to produce superior media experiences, minimize battery impact, maximize smooth app performance, and protect user privacy and security all on the most diverse lineup of devices out there.</p> <p>Android enables your apps to take advantage of premium device hardware, including high-end camera capabilities, powerful GPUs, dazzling displays, and AI processing. The demand for large-screen devices, including tablets, foldables and flippables, continues to grow, offering an opportunity to reach high-value users. Also, Android is committed to providing tooling and libraries to help your apps take advantage of the latest advances in AI.</p> <p>Your feedback on the Android 15 Developer Preview and QPR beta program plays a key role in helping Android continuously improve. The <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a> has more information about the preview, including downloads for Pixel and detailed documentation about changes. This preview is just the beginning, and we’ll have lots more to share as we move through the release cycle. Thank you in advance for your help in making Android a platform that works for everyone.</p> <h3><span style="font-size: x-large;">Protecting user privacy and security</span></h3> <p>Android is constantly working to create solutions that maximize user privacy and security.</p> <h3><span style="font-size: large;">Privacy Sandbox on Android</span></h3> <p>Android 15 brings Android AD Services up to extension level 10, incorporating the latest version of the <a href="https://developer.android.com/design-for-safety/privacy-sandbox" target="_blank">Privacy Sandbox on Android</a>, part of our work to develop new technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our <a href="https://developer.android.com/design-for-safety/privacy-sandbox/program-overview" target="_blank">website has more</a> about the Privacy Sandbox on Android developer preview and beta programs to help you get started.</p> <h3><span style="font-size: large;">Health Connect</span></h3> <p>Android 15 integrates Android 14 extensions 10 around <a href="https://developer.android.com/health-and-fitness/guides/health-connect/develop/get-started" target="_blank">Health Connect by Android</a>, a secure and centralized platform to manage and share app-collected health and fitness data. This update adds support for new data types across <a href="https://developer.android.com/reference/android/health/connect/datatypes/StepsCadenceRecord#STEPS_CADENCE_RATE_AVG" target="_blank">fitness</a>, <a href="https://developer.android.com/reference/android/health/connect/datatypes/NutritionRecord#TRANS_FAT_TOTAL" target="_blank">nutrition</a>, and more.</p> <h3><span style="font-size: large;">File integrity</span></h3> <p>Android 15's <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/security/FileIntegrityManager" target="_blank">FileIntegrityManager</a></span> includes new APIs that tap into the power of the <a href="https://docs.kernel.org/filesystems/fsverity.html" target="_blank">fs-verity</a> feature in the Linux kernel. With fs-verity, files can be <a href="https://developer.android.com/reference/android/security/FileIntegrityManager#setupFsVerity%28java.io.File%29" target="_blank">protected by custom cryptographic signatures</a>, helping you <a href="https://developer.android.com/reference/android/security/FileIntegrityManager#getFsVerityDigest%28java.io.File%29" target="_blank">ensure they haven't been tampered with or corrupted</a>. This leads to enhanced security, protecting against potential malware or unauthorized file modifications that could compromise your app's functionality or data.</p> <h3><span style="font-size: large;">Partial screen sharing</span></h3> <p>Android 15 supports partial screen sharing so users can share or record just an app window rather than the entire device screen. This feature, enabled first in Android 14 QPR2, includes <span style="font-family: Courier;"><a href="https://developer.android.com/about/versions/14/features/partial-screen-sharing#media_projection_callbacks" target="_blank"> MediaProjection</span> callbacks</a> that allow your app to customize the partial screen sharing experience. Note that <a href="https://developer.android.com/about/versions/14/behavior-changes-14#media-projection-consent" target="_blank">user consent is now required</a> for each <span style="font-family: Courier;"><a href="https://developer.android.com/reference/android/media/projection/MediaProjection" target="_blank">MediaProjection</a></span> capture session.</p> <h3><span style="font-size: x-large;">Supporting creators</span></h3> <p>Android continues its work to give you access to tools and hardware to support creators to bring their vision to life on Android.</p> <h3><span style="font-size: large;">In-app Camera Controls</span></h3> <p>Android 15 adds new extensions for more control over the camera hardware and its algorithms on supported devices:</p> <ul><ul> <li><b>Low light enhancements</b> that give developers control to <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#CONTROL_LOW_LIGHT_BOOST_INFO_LUMINANCE_RANGE" target="_blank">boost the brightness of the camera preview.</a></li></ul><ul> <li><b>Advanced flash strength adjustments</b> enabling precise control of flash intensity in both <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL" target="_blank">SINGLE</a> and <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics#FLASH_TORCH_STRENGTH_DEFAULT_LEVEL" target="_blank">TORCH</a> modes while capturing images.</li> </ul></ul> <h3><span style="font-size: large;">Virtual MIDI 2.0 Devices</span></h3> <p>Android 13 added support for connecting to <a href="https://developer.android.com/reference/android/media/midi/package-summary" target="_blank">MIDI 2.0 devices via USB</a>, which communicate using Universal MIDI Packets (UMP). Android 15 extends <a href="https://developer.android.com/reference/android/media/midi/MidiUmpDeviceService" target="_blank">UMP support to virtual MIDI apps</a>, enabling composition apps to control synthesizer apps as a virtual MIDI 2.0 device just like they would with an USB MIDI 2.0 device.</p> <h3><span style="font-size: x-large;">Performance and quality</span></h3> <p>Android continues its focus on helping you improve the quality of your apps. Much of this focus is around tooling and libraries, including <a href="https://developer.android.com/jetpack/compose" target="_blank">Jetpack Compose</a>, <a href="https://developer.android.com/studio" target="_blank">Android Studio</a>, and more.</p> <h3><span style="font-size: large;">Dynamic Performance</span></h3> <p>Android 15 continues our investment in the <a href="https://developer.android.com/games/optimize/adpf" target="_blank">Android Dynamic Performance Framework (ADPF)</a>, a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 will add new ADPF capabilities:</p> <ul><ul> <li><b>A <a href="https://developer.android.com/reference/android/os/PerformanceHintManager.Session#setPreferPowerEfficiency%28boolean%29" target="_blank">power-efficiency mode</a></b> for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.</li></ul><ul> <li><b>GPU and CPU work durations</b> can both be <a href="https://developer.android.com/reference/android/os/PerformanceHintManager.Session#reportActualWorkDuration%28android.os.WorkDuration%29" target="_blank">reported</a> in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.</li></ul><ul> <li><b><a href="https://developer.android.com/reference/android/os/PowerManager#getThermalHeadroomThresholds%28%29" target="_blank">Thermal headroom thresholds</a></b> to interpret possible thermal throttling status based on headroom prediction.</li> </ul></ul> <p>To learn more about how to use ADPF in your apps and games, <a href="https://developer.android.com/games/optimize/adpf" target="_blank">head over to the documentation</a>.</p> <h3><span style="font-size: x-large;">Developer Productivity</span></h3> <p>Android 15 continues to add OpenJDK APIs, including quality-of-life improvements around <a href="https://developer.android.com/reference/java/nio/ByteBuffer#get%28int,%20byte[]%29" target="_blank">NIO buffers</a>, <a href="https://developer.android.com/reference/java/util/stream/DoubleStream.DoubleMapMultiConsumer" target="_blank">streams</a>, <a href="https://developer.android.com/reference/javax/security/auth/x500/X500PrivateCredential" target="_blank">security</a>, and more. These APIs are updated on <a href="https://android-developers.googleblog.com/2023/11/the-secret-to-androids-improved-memory-latest-android-runtime-update.html" target="_blank">over a billion devices running Android 12+ through Google Play System updates</a>, so you can target the latest programming features.</p> <h3><span style="font-size: x-large;">App compatibility</span></h3> <image><div style="text-align: center;"><img alt="Image of Android 15 Development timeline, indicating we are on time with Developer Previews in February" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjorrv3MG899Rr4AvPI0rRj3UrXpg_O2qDcKpCXekB11JGPO5hDJgqUvvy9aZ10eusam_4cNx8zzRb8rfCv1pRsgkSWH1yFuUTr-G97i8u4SrsBey8KzWdeJi1lUpXSq7x52hoApa2GNCnSfFjeMN4eEwFasWb1IaO8rAZFJYqY9mcC7uj1b4ncp1EQzyY/s1600/image2.png" width="100%" /></div></image><br /> <p>To give you more time to plan for app compatibility work, we’re letting you know our Platform Stability milestone well in advance.</p> <p>At this milestone, we’ll deliver final SDK/NDK APIs and also final internal APIs and app-facing system behaviors. We’re expecting to reach Platform Stability in June 2024, and from that time you’ll have several months before the official release to do your final testing. The release timeline details are <a href="https://developer.android.com/about/versions/15/overview#timeline" target="_blank">here</a>.</p> <h2><span style="font-size: x-large;">Get started with Android 15</span></h2> <p>The Developer Preview has everything you need to try the Android 15 features, test your apps, and give us feedback. You can get started today by <a href="https://developer.android.com/about/versions/15/get#pixel_flash_install" target="_blank">flashing a system image</a> onto a Pixel 6, 7, or 8 series device, along with the Pixel Fold and Pixel Tablet. If you don’t have a Pixel device, you can <a href="https://developer.android.com/about/versions/15/get#on_emulator" target="_blank">use the 64-bit system images with the Android Emulator</a> in Android Studio.</p> <p>For the best development experience with Android 15, we recommend that you use the <a href="https://developer.android.com/studio/preview" target="_blank">latest preview of Android Studio Jellyfish</a> (or more recent Jellyfish+ versions). Once you’re set up, here are some of the things you should do:</p> <ul><ul> <li>Try the new features and APIs – your feedback is critical during the early part of the developer preview. Report issues in our tracker on the <a href="https://developer.android.com/about/versions/15/feedback" target="_blank">feedback page</a>.</li></ul><ul> <li>Test your current app for compatibility – learn whether your app is affected by changes in Android 15; install your app onto a device or emulator running Android 15 and extensively test it.</li> </ul></ul> <p>We’ll update the preview system images and SDK regularly throughout the Android 15 release cycle. This initial preview release is for developers only and not intended for daily or consumer use, so we're making it available by manual download only. Once you’ve manually installed a preview build, you’ll automatically get future updates over-the-air for all later previews and Betas. Read more <a href="https://developer.android.com/about/versions/15/overview#pixel" target="_blank">here</a>.</p> <p>If you intend to move from the <a href="https://developer.android.com/about/versions/14/get-qpr" target="_blank">Android 14 QPR Beta program</a> to the Android 15 Developer Preview program and don't want to have to wipe your device, we recommend that you move to Developer Preview 1 now. Otherwise you may run into time periods where the Android 14 Beta will have a more recent build date which will prevent you from going directly to the Android 15 Developer Preview without doing a data wipe.</p> <p>As we reach our Beta releases, we'll be inviting consumers to try Android 15 as well, and we'll open up enrollment for the Android Beta program at that time. For now, please note that the Android Beta program is not yet available for Android 15.</p> <p>For complete information, visit the <a href="https://developer.android.com/about/versions/15" target="_blank">Android 15 developer site</a>.</p><br /> <p><small><em>Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.</em></small></p> Android 15 Announcements Explore mobile Release Notes Android Developers #WeArePlay | How two sea turtle enthusiasts are revolutionizing marine conservation http://android-developers.googleblog.com/2024/02/weareplay-how-two-sea-turtle-enthusiasts-are-revolutionizing-marine-conservation.html Android Developers Blog urn:uuid:1679399e-a990-bbf9-4950-a945842380d9 Wed, 14 Feb 2024 17:03:32 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu218W2RyLDMAvOEcTDjLxA2tjNEFk6822pJCEX1uklhlS4xpUn4A5pQbmDLsnUgOC_Vfzy1stegKYeBgy0jdWOCimNm_I9eTkUg1l5lJRk0ASIaaZxda23M1MU6HvxT5yLhxzdzNMCRU3j457Tn6g7RLBLWs7sAvwCa3u0ytAAt_WUpmpGRM-HCmzGjA/s1600/%23WeArePlay%20Social%20.png" style="display: none;" /> <em>Posted by Leticia Lago – Developer Marketing</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfkoyiV0Ohxbe89HXqSsLkj4WD8ADd5AmwhHRv4MyMdbrm11cE1wn-SnjSYjsmWupfwZDt6FhaV_-kWQJ1AdObLCTglDqkO1V_Uo6z7S14NpYbQyWzxaDNOMK3fEa2_k25zNk-kQIkDI21X8YjGyoKu-Nnuptx1YYyd6nXmIxC4bPJQl0iHBj2dMD2nI4/s1600/%23WeArePlay%20Banner.png" /></a> <a name='more'></a><p></p> <iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="CfzhLOiczDQ" width="100%" height="400" src="https://www.youtube.com/embed/CfzhLOiczDQ"></iframe> <p>When environmental science student Caitlin returned home from a trip monitoring sea turtles in Western Australia, she was inspired to create a conservation tool that could improve tracking of the species. She connected with a French developer and fellow marine life enthusiast Nicolas to design their app <a href="https://play.google.com/store/apps/details?id=fr.altplusun.we_spot_turtles&amp;hl=en&amp;gl=US" target="_blank">We Spot Turtles!</a>, allowing anyone to support tracking efforts by uploading pictures of them spotted in the wild.</p> <p>Caitlin and Nicolas shared their journey in our latest film for <a href="https://play.google.com/console/about/weareplay/" target="_blank">#WeArePlay</a>, which showcases the amazing stories behind apps and games on Google Play. We caught up with the pair to find out more about their passion and how they are making strides towards advancing sea turtle conservation. </p> <h4><span style="font-size: large;">Tell us about how you both got interested in sea turtle conservation?</span></h4> <p><b>Caitlin:</b> A few years ago, I did a sea turtle monitoring program for the Department of Biodiversity, Conservation and Attractions in Western Australia. It was probably one of the most magical experiences of my life. After that, I decided I only really wanted to work with sea turtles.</p> <p><b>Nicolas:</b> In 2010, in French Polynesia, I volunteered with a sea turtle protection project. I was moved by the experience, and when I came back to France, I knew I wanted to use my tech background to create something inspired by the trip.</p> <h4><span style="font-size: large;">How did these experiences lead you to create We Spot Turtles!?</span></h4> <p><b>Caitlin:</b> There are seven species of sea turtle, and all are critically endangered. Or rather there’s not enough data on them to inform an accurate endangerment status. This means the needs of the species are going unmet and sea turtles are silently going extinct. Our inspiration is essentially to better track sea turtles so that conservation can be improved. </p> <p><b>Nicolas:</b> When I returned to France after monitoring sea turtles, I knew I wanted to make an app inspired by my experience. However, I had put the project on hold for a while. Then, when a friend sent me Caitlin’s social media post looking for a developer for a sea turtle conservation app, it re-ignited my inspiration, and we teamed up to make it together.</p> <image><div style="text-align: center;"><img id="imgFull" alt="close up image of a turtle resting in a reef underwater" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3dDXPA6FttMfzWiVw9cIXMWzS-Nzd_NWfDLUnjnShQV9rSVRnp1sJIaboQNG7z_nWrNfWjFrfu3KotnVb549sKwmH7m3adi873ADr11snns0Hg8Ew72jwTpLPuG2WNbgEMH0l62-sBXK0soMmUgtrak5EEyDRwCKrI79rSqHCvHVCqb5RXGog0aoi2XY/s1600/image3.png" width="100%"/></div></image> <h4><span style="font-size: large;">What does We Spot Turtles! do?</span></h4> <p><b>Caitlin:</b> Essentially, members of the public upload images of sea turtles they spot – and even get to name them. Then, the app automatically geolocates, giving us a date and timestamp of when and where the sea turtle was located. This allows us to track turtles and improve our conservation efforts.</p> <h4><span style="font-size: large;">How do you use artificial intelligence in the app?</span></h4> <p><b>Caitlin:</b> The advancements in AI in recent years have given us the opportunity to make a bigger impact than we would have been able to otherwise. The machine learning model that Nicolas created uses the facial scale and pigmentations of the turtles to not only identify its species, but also to give that sea turtle a unique code for tracking purposes. Then, if it is photographed by someone else in the future, we can see on the app where it's been spotted before.</p> <h4><span style="font-size: large;">How has Google Play supported your journey?</span></h4> <p><b>Caitlin:</b> Launching our app on Google Play has allowed us to reach a global audience. We now have communities in Exmouth in Western Australia, Manly Beach in Sydney, and have 6 countries in total using our app already. Without Google Play, we wouldn't have the ability to connect on such a global scale.</p> <p><b>Nicolas:</b> I’m a mobile application developer and I use Google’s Flutter framework. I knew Google Play was a good place to release our title as it easily allows us to work on the platform. As a result, we’ve been able to make the app great.</p> <image><div style="text-align: center;"><img id="imgFull" alt="Photo pf Caitlin and Nicolas on the bach in Australia at sunset. Both are kneeling in the sand. Caitlin is using her phone to identify something in the distance, and gesturing to Nicolas who is looking in the same direction" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4oAr8typ6jmDgb9oFV6f0AwCnp6vItKolavM-MGc-8nZCgaajFILzRDzMmN1OZNrTXUTxzwiGwKI8padd_Zl-HcGq-BaYm6EH8br4zSvH9hufBq0eHcOzSid_F6Qv3WiMTGZwzbx_pqdJCotyFGCWUmS0f4MJ4pg4iAxgODF3_DkVfakEprPwSnsTHqw/s1600/unnamed%20%2812%29.jpg" width="100%"/></div></image> <h4><span style="font-size: large;">What do you hope to achieve with We Spot Turtles!?</span></h4> <p><b>Caitlin:</b> We Spot Turtles! puts data collection in the hands of the people. It’s giving everyone the opportunity to make an impact in sea turtle conservation. Because of this, we believe that we can massively alter and redefine conservation efforts and enhance people’s engagement with the natural world.</p> <h4><span style="font-size: large;">What are your plans for the future?</span></h4> <p><b>Caitlin:</b> Nicolas and I have some big plans. We want to branch out into other species. We'd love to do whale sharks, birds, and red pandas. Ultimately, we want to achieve our goal of improving the conservation of various species and animals around the world. </p><br/> <p>Discover other inspiring app and game founders featured in <a href="https://play.google.com/console/about/weareplay/" target="_blank">#WeArePlay</a>.</p> <br /><br /> <p></p><center> How useful did you find this blog post? </center><p></p> <p></p><center> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> <a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.2056663615&amp;entry.646747778=changeme-mm/yy" target="_blank">★</a> </center><p></p> <div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s260/lockup_ic_Google_Play_H_260x53px_clr.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="53" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxnvf5XzyebGljqgi8J7by9XsvaL5WWLNamSyTg4w_c0kPHjY1B1no1FQsdSfUHUwNw0UuYfXuo6i7K6VpdyV2-K8ms4VFmZA438ujm6qwtZMt5rJfMGymhQ_iCX2Z8h0MuJo7gXUQ4Hb-hjKYK1isibMZZxCyX_vo3kGoP5tieK2PI2ZhYdGh4gsqhwA/s200/lockup_ic_Google_Play_H_260x53px_clr.png" width="200" /></a></div> #WeArePlay android developers app development developer stories Featured Google Play google play developers success stories Android Developers Cloud photos now available in the Android photo picker http://android-developers.googleblog.com/2024/02/cloud-photos-now-available-in-android-photo-picker.html Android Developers Blog urn:uuid:39372a87-e5d8-5000-7848-fddae4faea83 Tue, 13 Feb 2024 17:00:00 +0000 <meta content="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBQ5LxLRpc0YSVGD1WcneUtl1bT-ieccmHkAh0rKAxWgRnm_8iUeDqpOXhJaESAuskzqGO8Z8fxMbqO1WezffgdJEPKPCBpKtCnta07ISgTq0pZ_dHEyZTNY30w8K6gs3Oa1Ep9iYW7SbpGS0w1pdlQDfie9n5HTh8EiswgcbDPOWWK_eJ15IAd9H2-4c/s1600/social-Cloud-photos-now-available-in-the-Android-photo-picker.png" name="twitter:image"></meta> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBQ5LxLRpc0YSVGD1WcneUtl1bT-ieccmHkAh0rKAxWgRnm_8iUeDqpOXhJaESAuskzqGO8Z8fxMbqO1WezffgdJEPKPCBpKtCnta07ISgTq0pZ_dHEyZTNY30w8K6gs3Oa1Ep9iYW7SbpGS0w1pdlQDfie9n5HTh8EiswgcbDPOWWK_eJ15IAd9H2-4c/s1600/social-Cloud-photos-now-available-in-the-Android-photo-picker.png" style="display: none;" /> <em>Posted by Roxanna Aliabadi Walker – Product Manager</em> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qtvzDbbpQYf6oabNpfi_xV8ruIeWVieC4DPGUjuhHDgIi_nXKtzLqIIskpCGHDrWJsf9fMzkjOJwmPKlYg-Xxe6CimjzeLtlQ-VH6six6aTp7Dkw2EsYPil6iyHZ2uZSuD_sbhTBVogXn55dwkoFmfce6a-w4lsXQ4O6Twbaj2kOyEebL2o4m3mh3Z4/s1600/header-Cloud-photos-now-available-in-the-Android-photo-picker.png"><img border="0" data-original-height="800" data-original-width="100%" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qtvzDbbpQYf6oabNpfi_xV8ruIeWVieC4DPGUjuhHDgIi_nXKtzLqIIskpCGHDrWJsf9fMzkjOJwmPKlYg-Xxe6CimjzeLtlQ-VH6six6aTp7Dkw2EsYPil6iyHZ2uZSuD_sbhTBVogXn55dwkoFmfce6a-w4lsXQ4O6Twbaj2kOyEebL2o4m3mh3Z4/s1600/header-Cloud-photos-now-available-in-the-Android-photo-picker.png" /></a> <h2>Available now with Google Photos</h2> <p>Our photo picker has always been the gateway to your local media library, providing a secure, date-sorted interface for users to grant apps access to selected images and videos. But now, we're taking it a step further by integrating cloud photos from your chosen cloud media app directly into the photo picker experience.</p> <image><div style="text-align: center;"><img alt="Moving image of the photo picker access" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGHAB8sdmGvT9ly9YMYMQdE9xVHKrgu_CeZMBIlWAIlUbyzapQmhc2xPT1uRxH1El2UoYWXTM3goBjLbHz4dPOphia_UJnWd3cogWRW7QALorWnIS5Oymdc7tTktlfi1pdP4eFjPbUxhaKabuWvYFmIo4rW2J-2zORBt4hnkoGAGHtxQGVx45DbJjd0BU/s1600/image2.gif" width="40%" /></div></image> <h3>Unifying your media library</h3> <p>Backed-up photos, also known as "cloud photos," will now be merged with your local ones in the photo picker, eliminating the need to switch between apps. Additionally, any albums you've created in your cloud storage app will be readily accessible within the photo picker's albums tab. If your cloud media provider has a concept of “favorites,” they will be showcased prominently within the albums tab of the photo picker for easy access. This feature is currently rolling out with the February <a href="https://support.google.com/product-documentation/answer/11462338" target="_blank">Google System Update</a> to devices running Android 12 and above.</p> <h3>Available now with Google Photos, but open to all</h3> <p>Google Photos is already supporting this new feature, and our APIs are open to any cloud media app that qualifies for our <a href="https://developer.android.com/guide/topics/providers/cloud-media-provider#eligibility" target="_blank">pilot program</a>. Our goal is to make accessing your lifetime of memories effortless, regardless of the app you prefer.</p> <p>The Android photo picker will attempt to auto-select a cloud media app for you, but you can change or remove your selected cloud media app at any time from photo picker settings.</p> <image><div style="text-align: center;"><img alt="Image of Cloud media settings in photo picker settings" border="0" id="imgCaption" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXyy2UZb-JKDSR0Whhi7fImAYHaAxTtnqA1gGfWCESzZ8WJsH-7X_Yd0fsg965WSrnb612yIA2eIsvapfmEg7aBUM2j8HbLGfyGjr_KN-TTij08WuXdLsCN7ewZW6G5i-5QyhKl7nRuGhSVSV8a7r310j3YiuKjyCcKNA4AfxzheJCHZPjDUl_ByXsgoY/s1600/image1.png" width="40%" /></div></image> <h3>Migrate today for an enhanced, frictionless experience</h3> <p>The Android photo picker substantially reduces friction by not requiring any runtime permissions. If you switch from using a custom photo picker to the Android photo picker, you can offer this enhanced experience with cloud photos to your users, as well as reduce or entirely eliminate the overhead involved with acquiring and managing access to photos on the device. (Note that apps without a need for persistent and/or broad scale access to photos - for example - to set a profile picture, must adopt the Android photo picker in lieu of any sensitive file permissions to adhere to <a href="https://support.google.com/googleplay/android-developer/answer/14115180?hl=en" target="_blank">Google Play policy</a>).</p> <p>The photo picker has been backported to Android 4.4 to make it easy to migrate without needing to worry about device compatibility. Access to cloud content will only be available for users running Android 12 and higher, but developers do not need to consider this when implementing the photo picker into their apps. To use the photo picker in your app, update the ActivityX dependency to version 1.7.x or above and add the following code snippet:</p> <!--HTML generated using hilite.me--><div style="background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="color: #666666; font-family: courier;"><span>//</span> Registers a photo picker activity launcher in single<span>-</span><span>select</span> mode<span>.</span> val pickMedia <span>=</span> registerForActivityResult(PickVisualMedia()) { uri <span>-&gt;</span> <span>//</span> Callback is invoked after the user selects a media item <span>or</span> closes the <span>//</span> photo picker<span>.</span> <span>if</span> (uri <span>!=</span> null) { <span>Log</span><span>.</span>d(<span>"PhotoPicker"</span>, <span>"Selected URI: $uri"</span>) } <span>else</span> { <span>Log</span><span>.</span>d(<span>"PhotoPicker"</span>, <span>"No media selected"</span>) } } <span>//</span> Launch the photo picker <span>and</span> let the user choose images <span>and</span> videos<span>.</span> pickMedia<span>.</span>launch(PickVisualMediaRequest(PickVisualMedia<span>.</span>ImageAndVideo)) <span>//</span> Launch the photo picker <span>and</span> let the user choose only images<span>.</span> pickMedia<span>.</span>launch(PickVisualMediaRequest(PickVisualMedia<span>.</span>ImageOnly)) <span>//</span> Launch the photo picker <span>and</span> let the user choose only videos<span>.</span> pickMedia<span>.</span>launch(PickVisualMediaRequest(PickVisualMedia<span>.</span>VideoOnly))</span> </pre></div> <p>More customization options are listed in our <a href="https://developer.android.com/training/data-storage/shared/photopicker" target="_blank">developer documentation</a>. </p> Announcements Explore Google Photos Media Android Developers Broadcast Design News Package http://www.aftereffectvn.info/2017/05/broadcast-design-news-package.html Free After Effect Template urn:uuid:1e1b6456-1fea-d06f-1b71-1d6d1aa27597 Wed, 03 May 2017 12:48:53 +0000 <div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-3jAqJjDpizg/WQVSjfZ0JDI/AAAAAAAAARw/mWPEorMhozshyXpI3qr--NTbxPFWGl1-gCLcB/s1600/preview_590_300_V21.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-3jAqJjDpizg/WQVSjfZ0JDI/AAAAAAAAARw/mWPEorMhozshyXpI3qr--NTbxPFWGl1-gCLcB/s1600/preview_590_300_V21.jpg"></a></div><h6 style="text-align: center;">VideoHive Broadcast Design News Package<br>1920x1080 | CC 2015, CC 2014, CC, CS6, CS5.5, CS5 | 2.82gb</h6></div><a href="http://www.aftereffectvn.info/2017/05/broadcast-design-news-package.html#more">Đọc thêm »</a> After Effects Project File Broadcast Packages Files News VideoHive Jc-imedia.com VideoHive 100 Photo Slideshow http://www.aftereffectvn.info/2017/05/videohive-100-photo-slideshow.html Free After Effect Template urn:uuid:03674f16-1a70-6d0c-dd5f-d03d26465c84 Mon, 01 May 2017 18:53:51 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-wFDBjcoHPWs/WQeCJE9M-QI/AAAAAAAAFrU/lNEU7LppZFkR7NPrkKegxZuUXbNI1mioACLcB/s1600/100-photo-slide-show-after-effects-template-inline-VH-updated.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-wFDBjcoHPWs/WQeCJE9M-QI/AAAAAAAAFrU/lNEU7LppZFkR7NPrkKegxZuUXbNI1mioACLcB/s1600/100-photo-slide-show-after-effects-template-inline-VH-updated.jpg"></a></div><h6 style="text-align: center;">VideoHive 100 Photo Slideshow<br>1920x1080 | CC 2015, CC 2014, CC, CS6, CS5.5, CS5, CS4 | 130mb</h6><a href="http://www.aftereffectvn.info/2017/05/videohive-100-photo-slideshow.html#more">Đọc thêm »</a> After Effects Project File Files Grunge Video Displays VideoHive StLove Cinematic Light Logo Reveal Pack http://www.aftereffectvn.info/2017/05/cinematic-light-logo-reveal-pack.html Free After Effect Template urn:uuid:5c80ab03-1d82-8487-0b2e-dcc9e3462691 Mon, 01 May 2017 18:25:27 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-mcF98zcbaYw/WQdsBeAs58I/AAAAAAAAFrE/NOYnsv8owWw8LeqpDvKMKGy8YLFv_D24ACLcB/s1600/stop.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-mcF98zcbaYw/WQdsBeAs58I/AAAAAAAAFrE/NOYnsv8owWw8LeqpDvKMKGy8YLFv_D24ACLcB/s1600/stop.jpg"></a></div><h6 style="text-align: center;">VideoHive Cinematic Light Logo Reveal Pack<br>1920x1080 | CC 2015, CC 2014, CC, CS6, CS5.5, CS5 | 65mb</h6><a href="http://www.aftereffectvn.info/2017/05/cinematic-light-logo-reveal-pack.html#more">Đọc thêm »</a> After Effects Project File Files Light Logo Stings VideoHive StLove HUD UI Infographics Pack 800+ http://www.aftereffectvn.info/2017/04/hud-ui-infographics-pack-800.html Free After Effect Template urn:uuid:7fc050fc-1443-aab5-7680-2524ddf19761 Fri, 21 Apr 2017 03:01:45 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-jB8kOIc71xE/WPl0E-KEBFI/AAAAAAAAFpQ/iHqjVZdAHtYWc2sJI0e859BRDD2oHh3cgCLcB/s1600/hudinfo_poster_new.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-jB8kOIc71xE/WPl0E-KEBFI/AAAAAAAAFpQ/iHqjVZdAHtYWc2sJI0e859BRDD2oHh3cgCLcB/s1600/hudinfo_poster_new.jpg"></a></div><h6 style="text-align: center;">VideoHive HUD UI Infographics Pack 800+<br>1920x1080 | CC2017, CC 2015, CC 2014, CC, CS6 | 460mb</h6><a href="http://www.aftereffectvn.info/2017/04/hud-ui-infographics-pack-800.html#more">Đọc thêm »</a> After Effects Project File Files Infographics VideoHive StLove Colorful Shadows - Motion Titles Pack http://www.aftereffectvn.info/2017/04/colorful-shadows-motion-titles-pack.html Free After Effect Template urn:uuid:ca556598-f791-a4ed-9d62-414ada300b95 Sat, 08 Apr 2017 04:41:20 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-LNBAVLKntx8/WOho6_0hGoI/AAAAAAAAFe8/-6kHXo8hwS07YWKP9ik3Oqg22J35OXMoQCLcB/s1600/Colorful%2BShadows%2B-%2BIMAGE.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-LNBAVLKntx8/WOho6_0hGoI/AAAAAAAAFe8/-6kHXo8hwS07YWKP9ik3Oqg22J35OXMoQCLcB/s1600/Colorful%2BShadows%2B-%2BIMAGE.png"></a></div><h6 style="text-align: center;">VideoHive Colorful Shadows - Motion Titles Pack<br>1920x1080 | CC 2015, CC 2014, CC, CS6 | 95mb</h6><a href="http://www.aftereffectvn.info/2017/04/colorful-shadows-motion-titles-pack.html#more">Đọc thêm »</a> 3D - Object After Effects Project File Files Titles VideoHive StLove HUD - UI Graphics for FILM, TV and GAMES http://www.aftereffectvn.info/2017/04/hud-ui-graphics-for-film-tv-and-games.html Free After Effect Template urn:uuid:ee2bfff2-00ad-c7df-0153-b471a18c850a Wed, 05 Apr 2017 08:37:47 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-bV6pszONPX8/WOSfdCheYEI/AAAAAAAAFd8/16tt9E1JEIYcVBr6-a3dV2EJsPLxEZ6UgCLcB/s1600/HUD-UI-GRAPHICS_590x332_V2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-bV6pszONPX8/WOSfdCheYEI/AAAAAAAAFd8/16tt9E1JEIYcVBr6-a3dV2EJsPLxEZ6UgCLcB/s1600/HUD-UI-GRAPHICS_590x332_V2.jpg"></a></div><h6 style="text-align: center;">VideoHive HUD - UI Graphics for FILM, TV and GAMES<br>1920x1080 | CC 2015, CC 2014, CC, CS6, CS5.5 | 2.17gb</h6><a href="http://www.aftereffectvn.info/2017/04/hud-ui-graphics-for-film-tv-and-games.html#more">Đọc thêm »</a> After Effects Project File Elements Files Miscellaneous Technology VideoHive StLove Element 3D Tutorials Model http://www.aftereffectvn.info/2017/03/element-3d-tutorials-model.html Free After Effect Template urn:uuid:56132028-1a19-63be-6cda-c7d0ae372cac Fri, 31 Mar 2017 08:00:01 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-P_C3W6UjJcc/WN4L8zlDPHI/AAAAAAAAFc4/Q2STf2-m-lcvJ8MGpH_qpsA6L2UXV-LlQCLcB/s1600/1%2Bthumb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="378" src="https://4.bp.blogspot.com/-P_C3W6UjJcc/WN4L8zlDPHI/AAAAAAAAFc4/Q2STf2-m-lcvJ8MGpH_qpsA6L2UXV-LlQCLcB/s640/1%2Bthumb.jpg" width="640"></a></div><h6 style="text-align: center;">Element 3D Tutorials Model<br>1920x1080 | CC 2015, CC 2014, CC, CS6, CS5.5, CS5, CS4 | 30min</h6><a href="http://www.aftereffectvn.info/2017/03/element-3d-tutorials-model.html#more">Đọc thêm »</a> After Effects Tutorial StLove VideoHive Lotus Pond Opener http://www.aftereffectvn.info/2017/03/videohive-lotus-pond-opener.html Free After Effect Template urn:uuid:c00b8c80-f582-30ba-5360-38508f4ee646 Thu, 30 Mar 2017 17:46:52 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-7j_x4c2CZwU/WN1BLbhEV5I/AAAAAAAAFco/xKUviLrfaH0PIyLCX_lj1s5O3NNz5bydwCLcB/s1600/590.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-7j_x4c2CZwU/WN1BLbhEV5I/AAAAAAAAFco/xKUviLrfaH0PIyLCX_lj1s5O3NNz5bydwCLcB/s1600/590.jpg"></a></div><h6 style="text-align: center;">VideoHive Lotus Pond Opener<br>1920x1080 | CC 2015, CC 2014, CC, CS6, CS5.5, CS5 | 455mb</h6><a href="http://www.aftereffectvn.info/2017/03/videohive-lotus-pond-opener.html#more">Đọc thêm »</a> 3D - Object After Effects Project File Files Openers VideoHive StLove VideoHive Cartoon FX Pack http://www.aftereffectvn.info/2017/03/videohive-cartoon-fx-pack.html Free After Effect Template urn:uuid:bc54c5cb-f593-3771-32a2-31ce78fb7dc2 Sun, 26 Mar 2017 07:12:17 +0000 <div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-JsT8jYpgeSw/WNdjfc7jAAI/AAAAAAAAFcI/KXwYS7ST1yICay8jRgWtzbzLBjPUwNPYgCLcB/s1600/Untitled-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-JsT8jYpgeSw/WNdjfc7jAAI/AAAAAAAAFcI/KXwYS7ST1yICay8jRgWtzbzLBjPUwNPYgCLcB/s1600/Untitled-1.jpg"></a></div><h6 style="text-align: center;">VideoHive Cartoon FX Pack<br>1920x1080 | CC 2015, CC 2014, CC, CS6, CS5.5, CS5, CS4 | 4.1gb</h6><a href="http://www.aftereffectvn.info/2017/03/videohive-cartoon-fx-pack.html#more">Đọc thêm »</a> After Effects Project File Background Cartoons Elements Files VideoHive StLove Solar System 2 ( Fantasy Planets ) 8K http://www.aftereffectvn.info/2017/03/solar-system-2-fantasy-planets-8k.html Free After Effect Template urn:uuid:b853400c-e63d-c27b-6c0e-ad142d3f6117 Sun, 26 Mar 2017 04:10:41 +0000 <div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-IRk_2qL2Opg/WNc4eUo0c1I/AAAAAAAAARc/yMtGuHdI-tI2M7KWX-fcpTsW1lNWnHK8gCLcB/s1600/preview%2Bimage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-IRk_2qL2Opg/WNc4eUo0c1I/AAAAAAAAARc/yMtGuHdI-tI2M7KWX-fcpTsW1lNWnHK8gCLcB/s1600/preview%2Bimage.jpg"></a></div><h6 style="text-align: center;">VideoHive Solar System 2 ( Fantasy Planets ) 8K<br>7680x4320 | CC 2015, CC 2014, CC, CS6, CS5.5, CS5 | 600mb</h6></div><a href="http://www.aftereffectvn.info/2017/03/solar-system-2-fantasy-planets-8k.html#more">Đọc thêm »</a> After Effects Project File Files Space Titles VideoHive Jc-imedia.com