Soru Android O: PHONE_STATE yayın sınırlaması


Uygulamamın bir çağrı kapatıldıktan sonra bir ekran göstermesi gerektiği yerde, truecaller uygulamasına benzer bir şey yapmaya çalışıyorum. Bu kaydederek başardı android.intent.action.PHONE_STATE örtülü yayın manifest dosya.

Ancak, Android O’yu hedefleyen uygulamayı değiştirdiğimde işe yaramıyor. Android O yayın sınırlamasıve bu kullanım örneğine alternatif bir çözüm bulmaya çalışıyorum.

Android dokümanlarında önerilen alternatif çözümler: Job scheduler veya kayıt ol service ile context.

İş zamanlayıcı: Nedeniyle Job scheduler optimizasyonlar geri arama almak için biraz gecikme olacaktır. Bu nedenle, uygulama ekranımızın telefon görüşmesinden sonra birkaç dakika gösterilmesi ve yeni arama günlüklerinin kontrol edilmesi için anketin birkaç saniyede bir gösterilmesi durumunda kullanıcı deneyimini etkileyecektir.

Java'da içerikle hizmet kaydetme: Uygulama aktif veya canlı olmasa bile davranışların çalışmasını istiyorum. Sistem öldürürse bu işe yaramaz Service.

Bir Forefront Hizmeti Kaydı: Bu, kullanıcıya her zaman gösterilecek bir bildirim gerektirir. Bu, kullanıcının spam'i olur ve 7/24 hizmet yürütülmesi, yayın sınırlamasının tamamını ortadan kaldıran çok fazla kaynak tüketir.

Lütfen kullanıcı deneyiminin aynı kalması için alternatif bir çözüm öner.

Şimdiden teşekkürler


34
2017-08-16 14:54


Menşei




Cevaplar:


Tek bir çözümünüz var, bir ön servis kullanın ve yayın alıcısını servise kaydedin.


3
2017-08-18 05:52



Ön plan hizmetinin gösterilmesi için bir bildirim gerektirdiği için daha iyi bir şey bekliyoruz. Bunun kullanıcı için bir spam olacağını düşünmüyor musunuz? Ve 7/24 hizmet veren bir çok kaynak tüketiyor. - Bob
Başka bir çözüm yok. - greywolf82
+1 Eklemek istiyorum - bildirim çok da kötü değil. Örneğin, LastPass şifre yöneticisi arka plan hizmeti için 7/24 gösterir ve çok az kaynak tüketir. Ayrıca, ekranda bir "yüz" varsa, FB messenger bildirimi gösterecektir. - David Rawson
Veritabanındaki her yeni arama kaydı girdisini tetiklemek için JobScheduler'ı kullanarak bir işin programlanması hakkında ne düşünüyorsunuz? - Bob


Android O'dan PHONE_STATE'i okumak için uygun bir çözüm olmadığından, gideceğimiz en iyi alternatif, yeni çağrı kaydı girişindeki bir işi tetiklemektir. içerik sağlayıcı. Bu sayede, konuşma sona erdikten sonra bir ekran (gecikme süresi birkaç saniye) gösterilmektedir.

NOT: Dezavantaj, telefon görüşmesinin durumunu alamayız (Zil sesi veya kapalı_adı vb.). Geri arama sadece yeni çağrı günlüğü Sistem DB'sine eklendikten sonra alınacaktır.


2
2017-08-28 09:14





Sonunda, "Gizli Yayın Kural Dışı Durumları" listesine eylem eklenmiştir, böylece ekleyebilirsiniz ACTION_PHONE_STATE_CHANGED tezahürünüze ve işe yarayacak:

https://developer.android.com/guide/components/broadcast-exceptions

ACTION_CARRIER_CONFIG_CHANGED,   TelephonyIntents.ACTION _ * _ SUBSCRIPTION_CHANGED,   "TelephonyIntents.SECRET_CODE_ACTION", ACTION_PHONE_STATE_CHANGED,   ACTION_PHONE_ACCOUNT_REGISTERED, ACTION_PHONE_ACCOUNT_UNREGISTERED

OEM   Telefon uygulamalarının bu yayınları alması gerekebilir.


2
2018-06-14 19:31





Benim için ve prodüksiyon uygulamasında çözüm api 25 ve üstü hedeflemekten kaçınınDaha iyi bir çözüm / api gelene kadar.

Uygulamanızın seviyesi 24 veya daha azını hedefliyorsa, yeni durumdan etkilenmezsiniz. Kapalı Yayın Kısıtlamaları Uygulamanız çalışmadığında bile uygulamanız PHONE_STATE yayınlarını dinleyebilir.

Daha düşük API'ları hedefleyen bir uygulama, yeni Android sürümlerinde normal olarak indirilip yüklenebilir; uygulamanızın yeni API'lar kullanılmasını gerektiriyorsa sdkTarget değerinizi güncellemenizin tek nedeni budur.


0
2017-09-04 10:40





Bir tane var gibi görünüyor yayın istisnası için ACTION_NEW_OUTGOING_CALL ama gelen çağrı için bir değil (veya arama sona erdiğinde). Giden biri için gelen, ancak gelen için olmayan bir böcek gibi görünüyor. Bir oldu hata raporu google sorun izleyicisinde dosyalandı. Umarım onların cevabı ne yapmamız gerektiğini açıklığa kavuşturur.

Hata izleyicinin güncellenmesi durumunda bu cevabı güncellerim.


0
2017-09-25 21:43





Burada belirtildiği gibi: https://issuetracker.google.com/37273064#comment4Android O sürümü için ACTION_PHONE_STATE_CHANGED (android.intent.action.PHONE_STATE) beyaz listeye eklenecek. Gelecekteki sürümde farklı bir mekanizma ile değiştirilebilirler.


0
2017-11-21 14:09



Beyaz listede mi? - Awesome
Şimdi Android O üzerinde çalışıyor, bu yüzden beyaz listede - shmakova