Implementare il blocco del numero di telefono

Poiché la telefonia è un canale di comunicazione molto aperto, chiunque può chiamare o inviare messaggi a qualsiasi numero in qualsiasi momento. Gli utenti Android devono quindi avere la possibilità di bloccare facilmente chiamate e messaggi indesiderati.

Prima di Android 7.0, gli utenti Android dovevano fare affidamento su app scaricate per limitare le chiamate e gli SMS provenienti da numeri di telefono fastidiosi. Molte di queste app non funzionano come previsto o forniscono un'esperienza non ottimale perché non esistono API adeguate per bloccare chiamate e messaggi.

Alcuni produttori potrebbero fornire le proprie soluzioni di blocco immediatamente, ma se gli utenti cambiano dispositivo, potrebbero perdere completamente l'elenco bloccato a causa della mancanza di interoperabilità. Infine, anche se gli utenti utilizzano app di composizione e client di messaggistica che forniscono questa funzionalità, probabilmente devono comunque eseguire l'azione di blocco in ogni app affinché il blocco venga applicato sia alle chiamate sia ai messaggi.

Funzionalità

La release di Android 7.0 introduce un fornitore di contenuti BlockedNumberProvider che memorizza un elenco di numeri di telefono che l'utente ha specificato come non in grado di contattarlo tramite comunicazioni telefoniche (chiamate, SMS, MMS). Il sistema rispetterà i numeri nell'elenco bloccato limitando le chiamate e gli SMS provenienti da questi numeri. Android 7.0 mostra l'elenco dei numeri bloccati e consente all'utente di aggiungerne e rimuoverne.

Inoltre, la funzionalità di blocco dei numeri consente al sistema e alle app pertinenti sulla piattaforma di lavorare insieme per proteggere l'utente e semplificare l'esperienza. L'app Telefono predefinita, il client di messaggistica predefinito, l'app con privilegi UICC e le app con la stessa firma del sistema possono leggere e scrivere direttamente nell'elenco bloccato. Poiché i numeri bloccati sono archiviati nel sistema, rimangono bloccati indipendentemente dalle app di chiamata o messaggistica utilizzate dall'utente. Infine, l'elenco dei numeri bloccati può essere ripristinato su qualsiasi nuovo dispositivo, indipendentemente dal produttore.

  • L'utente avrà la certezza di avere una funzionalità di blocco pronta all'uso e non perderà l'elenco bloccato quando cambia app o acquista un nuovo smartphone. Tutte le app pertinenti sul sistema possono condividere lo stesso elenco per offrire all'utente un'esperienza più snella.
  • Gli sviluppatori di app non devono sviluppare un proprio modo per gestire una lista bloccata e le chiamate e i messaggi in arrivo. Possono semplicemente utilizzare la funzionalità fornita dalla piattaforma.
  • Le app Telefono / Messaggero selezionate come predefinite dall'utente possono leggere e scrivere per il provider. Altre app possono avviare l'interfaccia utente di gestione della lista bloccata utilizzando createManageBlockedNumbersIntent()
  • Gli OEM possono utilizzare la funzionalità fornita dalla piattaforma per fornire una funzionalità di blocco out-of-the-box. Gli OEM possono stare tranquilli che, quando gli utenti passano da un dispositivo di un altro OEM, avranno un'esperienza di onboarding migliore perché anche l'elenco bloccato verrà trasferito.
  • Se l'operatore ha una propria app per chiamate o messaggistica, può riutilizzare la funzionalità della piattaforma per consentire all'utente di gestire una lista bloccata. Possono stare tranquilli che l'elenco bloccato dell'utente può rimanere con gli utenti, anche quando ricevono un nuovo dispositivo. Infine, tutte le app con privilegi dell'operatore possono leggere la lista bloccata, quindi se l'operatore vuole fornire un blocco aggiuntivo più efficace per l'utente in base alla lista bloccata, ora è possibile con questa funzionalità.

Flusso di dati

bloccare il flusso di dati dei numeri

Figura 1. Bloccare il flusso di dati dei numeri di telefono

Esempi e origine

Ecco alcuni esempi di chiamate che utilizzano la nuova funzionalità di blocco dei numeri:

Avviare Gestione numeri bloccati dall'app

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

Eseguire query sui numeri bloccati

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

Inserisci il numero bloccato

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

Eliminare il numero bloccato

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

Implementazione

Di seguito sono riportate le attività di alto livello che devono essere completate per utilizzare la funzionalità di blocco dei numeri:

  • Gli OEM implementano le funzionalità di limitazione di chiamate/messaggi sui propri dispositivi utilizzando BlockedNumberProvider
  • Se l'operatore ha un'app Telefono o Messenger, implementa le funzionalità di limitazione di chiamate/messaggi utilizzando BlockedNumberProvider
  • I fornitori di app Telefono e Messaggi di terze parti utilizzano BlockedNumberProvider per le loro funzionalità di blocco

Consigli per gli OEM

Se in precedenza il dispositivo non era mai stato fornito con funzionalità aggiuntive di limitazione di chiamate/messaggi, utilizza la funzionalità di blocco dei numeri nell'Android Open Source Project (AOSP) su tutti questi dispositivi. È consigliabile supportare punti di contatto ragionevoli per il blocco, ad esempio il blocco di un numero direttamente dal log delle chiamate o all'interno di un thread di messaggi.

Se il dispositivo era stato fornito in precedenza con funzionalità di limitazione di chiamate/messaggi, adatta le funzionalità in modo che tutti i numeri di telefono con corrispondenza esatta bloccati vengano memorizzati in BlockedNumberProvider, e che il comportamento relativo al fornitore soddisfi i requisiti per questa funzionalità descritti nel CDD (Android Compatibility Definition Document).

Qualsiasi altra funzionalità avanzata può essere implementata tramite fornitori personalizzati e controlli/interfaccia utente personalizzati, a condizione che i requisiti CDD siano soddisfatti per quanto riguarda il blocco dei numeri di telefono con corrispondenza esatta. È consigliabile etichettare queste altre funzionalità come "avanzate" per evitare confusione con la funzionalità di blocco dei numeri di base.

API

Ecco le API in uso:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Fai riferimento a BlockedNumberContract
    • API fornite da BlockedNumberContract
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

Interfaccia utente

L'interfaccia utente BlockedNumbersActivity.java fornita in AOSP può essere utilizzata così com'è. Gli implementatori dei dispositivi possono anche implementare la propria versione dell'interfaccia utente, a condizione che soddisfi i requisiti CDD correlati.

Tieni presente che potrebbe essere necessaria l'app per PC del partner per il backup e il ripristino per implementare il ripristino dell'elenco bloccato utilizzando BlockedNumberProvider. Guarda le immagini di seguito per l'interfaccia dei numeri bloccati fornita in AOSP.

interfaccia utente per bloccare i numeri

Figura 2. Interfaccia utente per bloccare i numeri di telefono

Convalida

Gli implementatori possono assicurarsi che la loro versione della funzionalità funzioni come previsto eseguendo i seguenti test CTS:

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

BlockedNumberProvider può essere manipolato utilizzando i comandi adb dopo aver eseguito $ adb root. Ad esempio:

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