Telefon numarası engelleme özelliğini uygulayın

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ışı

numaraları engelleme 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ü inceleyin
    • 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 ş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.

numaraları engelleme kullanıcı arayüzü

Ş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