Android API düzeyi 26'dan itibaren ön plan hizmetlerini kullanabilirsiniz. Bu şart, gizlenmenizi önlemek için dahil olmak üzere sistem kaynaklarına aşırı talep her zaman fayda var. Bu şart potansiyel bir sorun oluşturur: Bir uygulama birden fazla ön plan hizmetinin bildirimi dikkatli bir şekilde yönetmemesi birden fazla kalıcı öğe olabilir. Bu durumda, kapatılamayan bildirimlerle, bunların aktif listesinde istenmeyen karmaşaya bildirimleri etkinleştirebilirsiniz.
Gezinme gibi SDK'ları kullandığınızda bu sorun daha zorlaşır.
ön plan hizmetlerini çalıştıran uygulamalardan bağımsız olarak
Bu da birleştirmeyi zorlaştıran bağımsız kalıcı bildirimlere sahip.
Gezinme SDK'sı v1.11, bu sorunları gidermek için kullanıcıları
SDK içindekiler de dahil olmak üzere uygulama genelinde kalıcı bildirimlerin yönetilmesine yardımcı olur.
Bileşenler
Ön plan hizmet yöneticisi, Android ön planı etrafında bir sarmalayıcı sağlar hizmet sınıfı ve kalıcı bildirim sınıfı bulunur. Bu sarmalayıcının ana işlevi, Bildirim Kimliği'nin yeniden kullanılmasını zorunlu kılarak bildirimin tüm ön plan hizmetlerinde paylaşılabilir.
Gezinme SDK'sı, ilk kullanıma hazırlayıp almak için statik yöntemler içerir.
ForegroundServiceManager
single'ı. Bu singleton yalnızca başlatılabilir
Gezinme SDK'sının ömrü içinde bir kez. Sonuç olarak,
başlatma çağrıları (initForegroundServiceManagerMessageAndIntent()
veya
initForegroundServiceManagerProvider()
), ardından
olma ihtimaline karşı bir deneme yakalama bloğuyla birlikte gönderir. Gezinme SDK'sı
yöntemden herhangi birini birden çok kez çağırırsanız bir çalışma zamanı istisnası atar.
önce ForegroundServiceManager
ve çağrının tüm referanslarını temizleyin
Sonraki her aramadan önce clearForegroundServiceManager()
.
initForegroundServiceManagerMessageAndIntent()
işlevinin dört parametresi
application
, notificationId
, defaultMessage
ve resumeIntent
. Öğe
son üç parametre null ise bildirim, standart
Gezinme SDK'sı bildirimi. Diğer ön planı gizlemeye devam edebilirsiniz
geri bildirim gönderebileceksiniz. notificationId
parametresi
bildirim için kullanılması gereken bildirim kimliğini belirtir. Eğer
null ise rastgele bir değer kullanılır. Bu sorunu özel olarak çözmek için
diğer bildirimlerle (örneğin, başka bir SDK'dan gelen bildirimler) çakışmalıdır. İlgili içeriği oluşturmak için kullanılan
defaultMessage
, sistem şu koşulları sağlamadığında görüntülenen bir dizedir:
gidilir. resumeIntent
, bildirim yapıldığında tetiklenen bir niyettir
tıklanır. resumeIntent
null ise bildirimi tıklar
yok sayılır.
initForegroundServiceManagerProvider()
işlevinin üç parametresi
application
, notificationId
ve notificationProvider
. Son
iki parametre null ise bildirim, standart Gezinme SDK'sı
bildirimi görürsünüz. notificationId
parametresi,
bildirim için kullanılmalıdır. Null ise rastgele bir değer
kullanılır. Bunu açıkça, diğer tedarikçilerle çakışmaları gidermek için
diğer SDK'lardan gelen bildirimler gibi. notificationProvider
bir sağlayıcı hazırladıysa,
bildirimi oluşturmalarını sağlar.
Gezinme SDK'sı getForegroundServiceManager()
yöntemi,
ön plan hizmet yöneticisi teklileridir. Henüz bir dönüşüm izlemediyseniz
bu, initForegroundServiceManagerMessageAndIntent()
çağrısına eşdeğer
notificationId
, defaultMessage
ve için boş parametrelerle
resumeIntent
.
ForegroundServiceManager
, üç basit yöntem kullanır. İlk ikisi
bir hizmeti ön plana alıp ön plandan çıkarır ve bu işlem genellikle
daima farkında olmasını sağlayın. Bu yöntemlerin kullanılması
hizmetleri, paylaşılan kalıcı bildirimle ilişkilendirilir. Son
yöntemi (updateNotification()
), bildirimin yapıldığı yöneticiyi işaretler.
değiştirilmiştir ve yeniden oluşturulması gerekir.
Paylaşılan kalıcı bildirimin tam kontrolüne ihtiyacınız varsa
API, API'deki veri tanımlayıcılarını tanımlamak için bir NotificationContentProvider
bildirim almak için tek bir yöntem içeren bildirim sağlayıcı
güncel içeriğe göre kontrol edebilirsiniz. Ayrıca, kullanabileceğiniz
isteğe bağlı olarak kullanabilirsiniz. Temel sınıfın ana sınıflarından biri
amacı,updateNotification()
ForegroundServiceManager
için erişmesi lazım. Bir
yeni bildirim mesajları alması için bildirim sağlayıcı, bunu çağırabilirsiniz
dahili yöntemini kullanabilirsiniz.
Kullanım senaryoları
Bu bölümde, paylaşılan kalıcı öğe kullanımıyla ilgili kullanım senaryoları ayrıntılı olarak açıklanmaktadır. bildirimleri etkinleştirebilirsiniz.
- Diğer uygulama ön plan hizmetlerinin kalıcı bildirimlerini gizle
- En kolay senaryo mevcut davranışı korumak ve yalnızca
Gezinme SDK'sı bilgilerinin oluşturulması için kalıcı bildirim. Diğer hizmetler
ön plan hizmet yöneticisini kullanarak bu bildirimin arkasına gizlenebilir
startForeground()
vestopForeground()
yöntemleri. - Diğer uygulama ön plan hizmetlerinin kalıcı bildirimlerini gizle, ancak ayarla gezinirken gösterilen varsayılan metin
- En kolay ikinci senaryo ise mevcut davranışı korumak ve yalnızca
aşağıdakiler hariç olmak üzere, Gezinme SDK'sı bilgilerinin oluşturulmasıyla ilgili kalıcı bildirim:
sistem gezinmeyi devre dışı bırakır. Sistem navigasyonu açmadığında
initForegroundServiceManagerMessageAndIntent()
işlevine sağlanan dize aşağıdakilerden bahseden varsayılan Gezinme SDK'sı dizesi yerine görüntülenir "Google Haritalar". Ayrıca, bu çağrıyı, ileride lansmana başlamadan önce ve bildirim tıklandığında etkinleşir. - Kalıcı bildirimin oluşturulma süreci üzerinde tam kontrol sahibi olma
- Son senaryoda, bir bildirim sağlayıcısının tanımlanması ve oluşturulması gerekir.
ve bunu kullanarak
ForegroundServiceManager
öğesine iletebilirsiniz.initForegroundServiceManagerProvider()
. Bu seçenek size bildirimde nelerin oluşturulacağıyla ilgili tam kontrole sahiptir, ancak Navigasyon SDK'sı bildirim bilgilerinin Böylece, Güvenli Arama'da gösterilen faydalı adım adım istemleri bildirimi görürsünüz. Google, bu verileri almak için basit bir yol sağlamaz bildirime eklemeniz yeterli.
Örnek bildirim sağlayıcı
Aşağıdaki kod örneğinde, bildirimlerin nasıl oluşturulacağı ve geri gönderileceği gösterilmektedir bunun için basit bir bildirim içerik sağlayıcısı kullanabilirsiniz.
public class NotificationContentProviderImpl
extends NotificationContentProviderBase
implements NotificationContentProvider {
private String channelId;
private Context context;
private String message;
/** Constructor */
public NotificationContentProviderImpl(Application application) {
super(application);
message = "-- uninitialized --";
channelId = null;
this.context = application;
}
/**
* Sets message to display in the notification. Calls updateNotification
* to display the message immediately.
*
* @param msg The message to display in the notification.
*/
public void setMessage(String msg) {
message = msg;
updateNotification();
}
/**
* Returns the notification as it should be rendered.
*/
@Override
public Notification getNotification() {
Notification notification;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Spanned styledText = Html.fromHtml(message, FROM_HTML_MODE_LEGACY);
String channelId = getChannelId(context);
notification =
new Notification.Builder(context, channelId)
.setContentTitle("Notifications Demo")
.setStyle(new Notification.BigTextStyle()
.bigText(styledText))
.setSmallIcon(R.drawable.ic_navigation_white_24dp)
.setTicker("ticker text")
.build();
} else {
notification = new Notification.Builder(context)
.setContentTitle("Notification Demo")
.setContentText("testing non-O text")
.build();
}
return notification;
}
// Helper to set up a channel ID.
private String getChannelId(Context context) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
if (channelId == null) {
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel(
"default", "navigation", NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription("For navigation persistent notification.");
notificationManager.createNotificationChannel(channel);
channelId = channel.getId();
}
return channelId;
} else {
return "";
}
}
}
NotificationContentProviderImpl
oluşturduktan sonra
Aşağıdaki kodu kullanarak navigasyon SDK'sı:
ForegroundServiceManager f = NavigationApi.getForegroundServiceManager(getApplication());
mNotification = new NotificationContentProviderImpl(getApplication());
NavigationApi.clearForegroundServiceManager();
NavigationApi.initForegroundServiceManagerProvider(getApplication(), null, mNotification);
Uyarılar ve gelecekteki planlar
initForegroundServiceManagerMessageAndIntent()
veyainitForegroundServiceManagerProvider()
numaralı telefonu erkenden aramayı unutmayın. beklenen kullanım senaryosu iyi tanımlanmış olmalıdır. Bu yöntemi çağırmalısınız kontrol edin.-
Kod yolunun şöyle olması durumunda
initForegroundServiceManagerMessageAndIntent()
veyainitForegroundServiceManagerProvider()
birden fazla kez girildi. Gezinme SDK'sı 2.0 sürümünde bu yöntemin çağrılması birden çok kez çalışma zamanı istisnası yerine işaretli bir istisna atar. - Google, genel olarak tutarlı bir stil oluşturmak için başlık stiliyle eşleşen bildirimin geçerlilik süresi.
- Bir bildirim sağlayıcı tanımladığınızda uyarı davranışını kontrol edebilirsiniz. önceliklendirme.
- Google, adım adım verileri almak için basit bir yol sağlamaz Bildirim sağlayıcı tarafından bildirime eklenebilir.