Telefon iletişimi çok açık bir iletişim kanalı olduğundan (herkes istediği numarayı istediği zaman arayabilir veya kısa mesaj gönderebilir) Android kullanıcılarının istenmeyen aramaları ve kısa mesajları kolayca engelleyebilmesi gerekir.
Android 7.0'dan önce Android kullanıcılarının, rahatsız edici telefon numaralarından gelen aramaları ve kısa mesajları kısıtlamak için indirilen uygulamalara güvenmesi gerekiyordu. Bu uygulamaların çoğu, aramaları ve mesajları engellemek için uygun API'ler olmadığından istenen şekilde çalışmaz veya idealden daha az bir deneyim sunar.
Bazı üreticiler, kendi engelleme çözümlerini kutudan çıkar çıkmaz sunabilir ancak kullanıcılar cihaz değiştirirse birlikte çalışabilirlik eksikliği nedeniyle engellenen listeyi tamamen kaybedebilir. Son olarak, kullanıcılar bu tür işlevler sunan arama uygulamaları ve mesajlaşma istemcileri kullanıyor olsalar bile, engellemenin hem arama hem de mesajlaşma için geçerli olması için muhtemelen her uygulamada engelleme işlemini gerçekleştirmeleri gerekir.
Özellikler
Android 7.0 sürümünde, kullanıcının telefon iletişimi (arama, SMS, MMS) üzerinden iletişime geçememesi gerektiğini belirttiği telefon numaralarının listesini saklayan bir BlockedNumberProvider
içerik sağlayıcı tanıtıldı. Sistem, engellenen listedeki numaralardan gelen aramaları ve kısa mesajları kısıtlayarak bu numaralara saygı duyar. Android 7.0, engellenen numaraların listesini gösterir 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 birlikte çalışarak kullanıcıyı korumaya ve deneyimi basitleştirmeye yardımcı olmasını sağlar. Varsayılan çevirici, varsayılan mesajlaşma istemcisi, UICC ayrıcalıklı uygulaması ve sistemle aynı imzaya sahip uygulamalar, engellenenler listesini doğrudan okuyabilir ve bu listeye yazabilir. Engellenen numaralar sistemde depolandığından, kullanıcının hangi arama veya mesajlaşma uygulamasını kullandığına bakılmaksızın numaralar engellenmeye devam eder. Son olarak, engellenen numaralar listesi üreticiden bağımsız olarak yeni bir cihaza geri yüklenebilir.
- Kullanıcı, kutudan çıkar çıkmaz çalışan bir engelleme özelliğine sahip olur ve uygulama değiştirdiğinde veya yeni bir telefon aldığında engelleme listesini kaybetmez. Sistemdeki tüm alakalı uygulamalar, kullanıcıya en sorunsuz deneyimi sunmak için aynı listeyi paylaşabilir.
- Uygulama geliştiricilerin, engellenenler listesini ve gelen aramaları ya da mesajları yönetmek için kendi yöntemlerini geliştirmeleri gerekmez. Platform tarafından sağlanan özelliği kullanabilirler.
- Kullanıcı tarafından varsayılan olarak seçilen telefon uygulaması / mesajlaşma uygulaması, sağlayıcıda okuma ve yazma yapabilir. Diğer uygulamalar,
createManageBlockedNumbersIntent()
- OEM'ler, kutudan çıkar çıkmaz hazır bir engelleme özelliği sunmak için platform tarafından sağlanan özelliği kullanabilir. OEM'ler, kullanıcılar başka bir OEM'nin cihazından geçiş yaptığında engellenenler listesi de aktarılacağından daha iyi bir ilk katılım deneyimi yaşayacaklarından emin olabilir.
- Operatörün kendi arama veya mesajlaşma uygulaması varsa kullanıcının engellenenler listesi oluşturmasına izin vermek için platform özelliğini yeniden kullanabilir. Kullanıcılar, yeni bir cihaz alsalar bile kullanıcının engellenenler listesinin kullanıcıyla birlikte kalabileceğinden emin olabilir. Son olarak, operatör ayrıcalığına sahip tüm uygulamalar engellenenler listesini okuyabilir. Bu nedenle, operatör engellenenler listesine göre kullanıcı için daha güçlü bir engelleme sağlamak isterse bu özellik sayesinde bunu yapabilir.
Veri akışı

Şekil 1. Telefon numarası veri akışını engelleme
Örnekler ve kaynak
Numara engelleme özelliğinin kullanıldığı örnek aramaları aşağıda bulabilirsiniz:
Engellenen numara yöneticisini uygulamadan başlatma
Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);
Engellenen numaraları sorgulayın
Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI, new String[]{BlockedNumbers.COLUMN_ID, BlockedNumbers.COLUMN_ORIGINAL_NUMBER, BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);
Put blocked number
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
Engellenen numarayı silme
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
Numara engelleme özelliğini kullanmak için tamamlanması gereken üst düzey görevler şunlardır:
- OEM'ler,
BlockedNumberProvider
- Operatörde çevirici veya mesajlaşma uygulaması varsa
BlockedNumberProvider
- Üçüncü taraf telefon ve mesajlaşma uygulaması tedarikçi firmaları, engelleme özellikleri için
BlockedNumberProvider
kullanır
OEM'ler için öneriler
Cihaz daha önce ek arama/mesaj kısıtlama özellikleriyle birlikte gönderilmediyse bu tür tüm cihazlarda Android Açık Kaynak Projesi'ndeki (AOSP) numara engelleme özelliğini kullanın. Engelleme için makul giriş noktalarının desteklenmesi önerilir (ör. bir numarayı doğrudan arama günlüğünden veya ileti dizisinden engelleme).
Cihaz daha önce arama/mesaj kısıtlama özellikleriyle birlikte gönderildiyse özellikleri, engellenen tüm tam eşleşen telefon numaralarının BlockedNumberProvider,
içinde depolanacağı ve sağlayıcıyla ilgili davranışın Android Uyumluluk Tanımlama Belgesi'nde (CDD) belirtilen bu özellikle ilgili koşulları karşılayacağı şekilde uyarlayın.
Tam eşleşen telefon numaralarının engellenmesi ile ilgili CDD şartları karşılandığı sürece, diğer tüm gelişmiş özellikler özel sağlayıcılar ve özel kullanıcı arayüzü/denetimler aracılığıyla uygulanabilir. Temel numara engelleme özelliğiyle karıştırılmaması için bu diğer özelliklerin "gelişmiş" olarak etiketlenmesi önerilir.
API'ler
Kullanılan API'ler aşağıda verilmiştir:
TelecomManager API
Intent createManageBlockedNumbersIntent()
Carrier Config
KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
- Lütfen
BlockedNumberContract
bölümünü inceleyinBlockedNumberContract
tarafından sağlanan API'lerboolean 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 şartlarını karşıladığı sürece kendi kullanıcı arayüzü sürümlerini de uygulayabilir.
BlockedNumberProvider
kullanarak engellenenler listesinin geri yüklenmesini uygulamak için iş ortağının yedekleme ve geri yükleme PC uygulamasının gerekebileceğini lütfen unutmayın. AOSP'de sağlanan engellenen numaralar arayüzü için aşağıdaki resimlere bakın.

Şekil 2. Telefon numaralarını engelleme kullanıcı arayüzü
Doğrulama
Uygulamacılar, aşağıdaki CTS testlerini çalıştırarak özelliğin kendi sürümlerinin amaçlandığı şekilde çalıştığından emin olabilir:
android.provider.cts.BlockedNumberContractTest com.android.cts.numberblocking.hostside.NumberBlockingTest android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected android.telephony.cts.SmsManagerTest#testSmsBlocking
$ adb root
çalıştırıldıktan sonra BlockedNumberProvider
, adb
komutları kullanılarak değiştirilebilir. Örnek:
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