Widget ana makinesi oluşturma

Android destekli çoğu cihazda bulunan Android ana ekranı, kullanıcı tarafından yerleşik uygulama widget'ları (veya widget'lar) hızlı erişim sağlar. Ana ekran değişimi oluşturuyorsanız veya veya başka bir uygulamaya konduktan sonra, kullanıcının widget'ları AppWidgetHost. Bu değil çoğu uygulamanın yapması gereken bir şeydir. Ancak kendi ana makinenizi oluşturuyorsanız web sitesinin içerik sahibinin dolaylı olarak kabul ettiği sözleşme yükümlülüklerini anlamak önemlidir.

Bu sayfada, özel bir özelleştirmenin uygulanmasıyla ilgili sorumluluklara AppWidgetHost AppWidgetHost özelliğinin nasıl uygulanacağına dair belirli bir örnek için Android ana ekranının kaynak koduna bakın LauncherAppWidgetHost

Aşağıda, bir proje yönetimi yaklaşımının uygulanmasında yer alan temel sınıflar ve özel AppWidgetHost:

  • Uygulama widget'ı ana makinesi: AppWidgetHost, Kullanıcı arayüzlerine widget yerleştiren uygulamalar için AppWidget hizmeti. AppWidgetHost ana makinenin kendi paketi içinde benzersiz bir kimliğe sahip olmalıdır. Bu kimlik devam ediyor kullanımında yardımcı olur. Kimlik, genellikle atamanıza olanak tanır.

  • Uygulama widget kimliği: Her widget örneğine her seferinde benzersiz bir kimlik atanır . Görüntüleyin bindAppWidgetIdIfAllowed() Daha ayrıntılı bilgi için bir sonraki Widget'ları bağlama bölümüne bakın. İlgili içeriği oluşturmak için kullanılan benzersiz kimliği elde eder. allocateAppWidgetId(). Bu kimlik, widget'tan silinene kadar widget'ın ömrü boyunca kalır. ana bilgisayar. Ana makineye özgü bir durum (örneğin, widget'ı—barındırma paketi tarafından saklanmalı ve uygulama widget'ı kimliği.

  • Uygulama widget'ı ana makine görünümü: Çerçeve olarak AppWidgetHostView widget'ın gösterilmesi gerektiğinde sarmalanması gerekir. Widget, bir AppWidgetHostView ile ilişkilendirilir. ana bilgisayar.

    • Varsayılan olarak sistem bir AppWidgetHostView oluşturur, ancak ana makine şunları yapabilir: kapsamını genişleterek kendi AppWidgetHostView alt sınıfını oluşturabilir.
    • AppWidgetHostView, Android 12'den (API düzeyi 31) başlayarak "the" setColorResources() ve resetColorResources() ve dinamik olarak aşırı yüklenen renklerin nasıl ele alınacağını öğrenin. Düzenleyen: bu yöntemlerin renklerini sağlamaktan sorumludur.
  • Seçenekler paketi: AppWidgetHost, seçenekler paketini kullanarak ilgili kişiye AppWidgetProvider hakkında bilgi edinin (örneğin, boyut aralıklarının listesini ve widget'ı kilit ekranında veya ana ekranda bulunuyor. Bu bilgiler, AppWidgetProvider, widget'ın içeriğini ve görünümünü nasıl ve nasıl gösterildiği yeri seçin. Tekliflerinizi otomatikleştirmek ve optimize etmek için updateAppWidgetOptions() ve updateAppWidgetSize() widget'ın grubunu değiştirin. Bu yöntemlerin her ikisi de onAppWidgetOptionsChanged() AppWidgetProvider için geri arama.

Widget'ları bağlama

Kullanıcı, ana makineye bir widget eklediğinde bağlama adı verilen bir işlem gerçekleşir. Bağlama belirli bir uygulama widget kimliğinin belirli bir ana makine ve belirli AppWidgetProvider.

Bağlama API'leri, ana makinenin bağlama'yı tıklayın. Bu işlemi kullanmak için uygulamanızın şunu beyan etmesi gerekir: BIND_APPWIDGET izni içermelidir:

<uses-permission android:name="android.permission.BIND_APPWIDGET" />

Ancak bu sadece başlangıç. Çalışma zamanında, kullanıcı ana makineye bir widget eklemesine izin vermek için uygulamanıza izin verin. uygulamanızın widget ekleme izni varsa bindAppWidgetIdIfAllowed() yöntemidir. bindAppWidgetIdIfAllowed(), false sonucu döndürürse uygulamanız bir kullanıcıdan izin vermesini isteyen iletişim kutusu: "izin ver" (geçerli widget için) ekleme veya "her zaman izin ver" dahil edeceğiz.

Bu snippet, iletişim kutusunun nasıl gösterileceğine dair bir örnek sunar:

Kotlin

val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply {
    putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
    putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName)
    // This is the options bundle described in the preceding section.
    putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options)
}
startActivityForResult(intent, REQUEST_BIND_APPWIDGET)

Java

Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName);
// This is the options bundle described in the preceding section.
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options);
startActivityForResult(intent, REQUEST_BIND_APPWIDGET);

Barındırıcı, bir kullanıcının eklediği widget'ın yapılandırılmasına ihtiyaç olup olmadığını kontrol etmelidir. Örneğin, Daha fazla bilgi için Kullanıcıların uygulamayı yapılandırmasını etkinleştirme widget'ları hakkında daha fazla bilgi edinin.

Ev sahibi olma sorumlulukları

Widget'lar için AppWidgetProviderInfo meta verileri. Daha ayrıntılı olarak açıklanan bu yapılandırma seçeneklerini şu sayfada bulabilirsiniz: aşağıdaki bölümlerden AppWidgetProviderInfo Bir widget sağlayıcıyla ilişkilendirilmiş nesne.

Hedeflediğiniz Android sürümü ne olursa olsun, tüm ana makinelerde aşağıdaki sorumluluklardan yararlanabilirsiniz:

  • Widget eklerken, widget kimliğini daha önce açıklandığı şekilde atayın. Bir widget, düzenleyenden kaldırıldı. deleteAppWidgetId() izin verir.

  • Widget eklerken, yapılandırmak istediğiniz yapılandırma kullanıma sunuldu. Genellikle ana makinenin widget yapılandırmasını başlatması gerekir etkinliği varsa ve isteğe bağlı olarak işaretlenmemişse configuration_optional ve reconfigurable işaretleri. Görüntüleyin Widget'ı yapılandırma etkinliğinden güncelleme inceleyebilirsiniz. Bu, birçok widget'ın gösterilebilmesi için gerekli bir adımdır.

  • Widget'lar, AppWidgetProviderInfo içinde varsayılan bir genişlik ve yükseklik belirtir meta verilerdir. Bu değerler hücrelerde tanımlanır ve targetCellWidth ve targetCellHeight geçerliyse Android 12 belirtilir (veya yalnızca minWidth ve minHeight belirtilirse dps). Görüntüleyin Widget boyutlandırma özellikleri.

    Widget'ın en az bu kadar dps ile yerleştirildiğinden emin olun. Örneğin, Birçok ana makine, simgeleri ve widget'ları bir ızgarada hizalar. Bu senaryoda, ana makine, widget'ı eklemek için kullanacağınız minimum hücre sayısını minWidth ve minHeight kısıtlamalarını karşılamalıdır.

Önceki bölümde listelenen şartlara ek olarak, platform sürümleri, kullanıcılara yeni sorumluluklar veren özellikler ana bilgisayar.

Hedeflenen Android sürümüne göre yaklaşımınızı belirleyin

Android 12

Android 12 (API düzeyi 31), bu listeyi içeren ek bir List<SizeF> içerir bir widget örneğinin seçenekler paketinde alabileceği dps cinsinden olası boyutlardadır. Sağlanan boyutların sayısı, ana makine uygulamasına bağlıdır. Düzenleyenler genelde Telefonlar için iki boyut (dikey ve yatay) ve dört boyutlu katlanabilir cihazlar da var.

Farklı öğe sayısı için MAX_INIT_VIEW_COUNT (16) sınır vardır AppWidgetProvider tarafından sağlanan RemoteViews RemoteViews. AppWidgetProvider nesneleri, bir RemoteViews nesnesini List<SizeF>, en fazla MAX_INIT_VIEW_COUNT boyut sağlayın.

Android 12, ayrıca maxResizeWidth ve maxResizeHeight özellikleri hakkında daha fazla bilgi edinin. Bu özelliklerden en az birini kullanan bir widget'ın özelliklerinin belirtilen boyutu aşmaması.

Ek kaynaklar

  • Glance referans belgelerini inceleyin.