Telefon Numaralarını Engellemenin Uygulanması

Telefon çok açık bir iletişim kanalı olduğundan (herkes istediği zaman istediği numarayı arayabilir veya mesaj gönderebilir), Android kullanıcılarının istenmeyen aramaları ve mesajları kolayca engelleme özelliğine ihtiyacı vardır.

N'den önce Android kullanıcıları, rahatsız edici telefon numaralarından gelen aramaları ve mesajları kısıtlamak için indirilen uygulamalara güvenmek zorundaydı. Bu uygulamaların çoğu ya istendiği gibi çalışmıyor ya da çağrıları ve mesajları engellemek için uygun API'ler olmadığından ideal olmayan bir deneyim sağlıyor.

Bazı üreticiler kendi engelleme çözümlerini kullanıma hazır olarak gönderebilir, ancak kullanıcılar cihaz değiştirirse birlikte çalışabilirlik eksikliği nedeniyle engellenenler listesini tamamen kaybedebilirler. Son olarak, kullanıcılar bu tür işlevsellik sağlayan arama uygulamaları ve mesajlaşma istemcileri kullanıyor olsalar bile, engellemenin hem arama hem de mesajlaşma için etkili olması için muhtemelen her uygulamada engelleme eylemini gerçekleştirmeleri gerekecektir.

Özellikler

Android 7.0 sürümü, kullanıcının belirttiği ve telefon iletişimleri (çağrılar, SMS, MMS) yoluyla iletişim kuramaması gereken telefon numaralarının bir listesini saklayan bir BlockedNumberProvider içerik sağlayıcısı sunar. Sistem, bu numaralardan gelen aramaları ve kısa mesajları kısıtlayarak engellenen listedeki numaralara saygı duyacaktır. Android 7.0, engellenen numaraların listesini görüntüler ve kullanıcının numara eklemesine ve kaldırmasına olanak tanır.

Ayrıca numara engelleme özelliği, sistemin ve platformdaki ilgili uygulamaların, kullanıcının korunmasına ve deneyimin basitleştirilmesine yardımcı olmak için birlikte çalışmasını sağlar. Varsayılan çevirici, varsayılan mesajlaşma istemcisi, UICC ayrıcalıklı uygulama ve sistemle aynı imzaya sahip uygulamaların tümü doğrudan engellenen listeden okuyabilir ve bu listeye yazabilir. Engellenen numaralar sistemde saklandığından, kullanıcı hangi arama veya mesajlaşma uygulamasını kullanırsa kullansın, numaralar engellenmiş durumda kalır. Son olarak, engellenen numaralar listesi, üreticisine bakılmaksızın herhangi bir yeni cihaza geri yüklenebilir.

  • Kullanıcının, kutudan çıktığı gibi çalışan bir engelleme özelliğine sahip olacağı ve uygulamaları değiştirdiğinde veya yeni bir telefon aldığında engellenenler listesini kaybetmeyeceği garanti edilecektir. Kullanıcıya en akıcı deneyimi sunmak için sistemdeki ilgili tüm uygulamalar aynı listeyi paylaşabilir.
  • Uygulama geliştiricilerinin, engellenenler listesini ve gelen aramaları ve mesajları yönetmek için kendi yöntemlerini geliştirmelerine gerek yoktur. Platform tarafından sağlanan özelliği kullanabilirler.
  • Kullanıcı tarafından varsayılan olarak seçilen Dialer/messenger uygulamaları sağlayıcıya okuyabilir ve yazabilir. Diğer uygulamalar, createManageBlockedNumbersIntent() işlevini kullanarak engelleme listesi yönetimi kullanıcı arayüzünü başlatabilir.
  • OEM'ler, bir engelleme özelliğini kullanıma hazır olarak sunmak için platform tarafından sağlanan özelliği kullanabilir. OEM'ler, kullanıcılar başka bir OEM'in cihazından geçiş yaptıklarında, engellenenler listesi de aktarılacağından daha iyi bir katılım deneyimi yaşayacaklarından emin olabilirler.
  • Operatörün kendi çevirici veya mesajlaşma uygulaması varsa, kullanıcının bir engellenenler listesi tutmasına izin vermek için platform özelliğini yeniden kullanabilir. Yeni bir cihaz aldıklarında bile kullanıcının engelleme listesinin kullanıcılarda kalacağından emin olabilirler. Son olarak, operatör ayrıcalıklı tüm uygulamalar engelleme listesini okuyabilir; dolayısıyla operatör, engelleme listesine dayalı olarak kullanıcıya daha güçlü ek engelleme sağlamak isterse, bu artık bu özellikle mümkün.

Veri akışı

numara veri akışını engelle

Şekil 1. Telefon numaraları veri akışını engelleme

Örnekler ve kaynak

Numara engelleme yeni özelliğini kullanan örnek aramalar:

Engellenen numara yöneticisini uygulamadan başlat

Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);

Engellenen numaraları sorgula

Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI,
         new String[]{BlockedNumbers.COLUMN_ID,
         BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
         BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);

Engellenen numarayı koy

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);

Engellenen numarayı sil

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
getContentResolver().delete(uri, null, null);

Uygulama

Sayı engelleme özelliğini kullanmak için tamamlanması gereken üst düzey görevler şunlardır:

  • OEM'ler, BlockedNumberProvider kullanarak cihazlarına çağrı/mesaj kısıtlama özelliklerini uygular
  • Operatörün çevirici veya mesajlaşma uygulaması varsa BlockedNumberProvider kullanarak çağrı/mesaj kısıtlama özelliklerini uygulayın
  • Üçüncü taraf çevirici ve mesajlaşma uygulaması satıcıları, engelleme özellikleri için BlockedNumberProvider kullanıyor

OEM'ler için öneriler

Cihaz daha önce herhangi bir ek arama/mesaj kısıtlama özelliğiyle birlikte gönderilmemişse, bu tür cihazların tümünde Android Açık Kaynak Projesi'ndeki (AOSP) numara engelleme özelliğini kullanın. Bir numaranın doğrudan çağrı kaydından veya bir mesaj dizisi içinden engellenmesi gibi, engelleme için makul giriş noktalarının desteklenmesi önerilir.

Cihaz daha önce arama/mesaj kısıtlama özellikleriyle birlikte gönderilmişse, özellikleri, engellenen tüm tam eşleşme telefon numaralarının BlockedNumberProvider, Android Uyumluluğu'nda belirtilen bu özelliğin gereksinimlerini karşılayacağı şekilde uyarlayın. Tanım Belgesi (CDD).

Kesin eşlemeli telefon numaralarının engellenmesine ilişkin CDD gereklilikleri karşılandığı sürece, diğer tüm gelişmiş özellikler, özel sağlayıcılar ve özel kullanıcı arayüzü/kontroller aracılığıyla uygulanabilir. Temel numara engelleme özelliğiyle karışıklığı önlemek için bu diğer özelliklerin "gelişmiş" özellikler olarak etiketlenmesi önerilir.

API'ler

Kullanılan API'ler şunlardır:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Lütfen BlockedNumberContract bakın
    • BlockedNumberContract tarafından sağlanan API'ler
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

Kullanıcı arayüzü

AOSP'de sağlanan BlockedNumbersActivity.java kullanıcı arayüzü olduğu gibi kullanılabilir. Cihaz uygulayıcıları, ilgili CDD gerekliliklerini karşıladığı sürece kendi kullanıcı arayüzü sürümlerini de uygulayabilirler.

Engellenenler listesinin BlockedNumberProvider kullanılarak geri yüklenmesi için ortağın yedekleme ve geri yüklemeye yönelik bilgisayar uygulamasının gerekli olabileceğini lütfen unutmayın. AOSP'de sağlanan engellenen numaralar arayüzü için aşağıdaki resimlere bakın.

numaraları blokla kullanıcı arayüzü

Şekil 2. Telefon numaralarını engelleme kullanıcı arayüzü

Doğrulama

Uygulayıcılar, aşağıdaki CTS testlerini çalıştırarak kendi özellik sürümlerinin amaçlandığı gibi çalıştığından emin olabilirler:

android.provider.cts.BlockedNumberContractTest
com.android.cts.numberblocking.hostside.NumberBlockingTest
android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected
android.telephony.cts.SmsManagerTest#testSmsBlocking

BlockedNumberProvider $ adb root çalıştırıldıktan sonra adb komutları kullanılarak değiştirilebilir. Örneğin:

adb root
adb shell content query --uri content://com.android.blockednumber/blocked
adb shell content insert --uri / content://com.android.blockednumber/blocked --bind / original_number:s:'6501002000'
adb shell content delete --uri / content://com.android.blockednumber/blocked/1