Implementazione del blocco dei numeri di telefono

Poiché la telefonia è un canale di comunicazione aperto: chiunque può chiamare o inviare messaggi a qualsiasi numero in qualsiasi momento, gli utenti Android necessitano della possibilità di bloccare facilmente chiamate e messaggi indesiderati.

Prima di N, gli utenti Android dovevano fare affidamento sulle app scaricate per limitare le chiamate e gli SMS provenienti da numeri di telefono fastidiosi. Molte di queste app non funzionano come desiderato o forniscono un'esperienza tutt'altro che ideale perché non esistono API adeguate per bloccare chiamate e messaggi.

Alcuni produttori potrebbero fornire le proprie soluzioni di blocco pronte all'uso, 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 chiamata e client di messaggistica che forniscono tale funzionalità, probabilmente dovranno comunque eseguire l'azione di blocco in ciascuna app affinché il blocco abbia effetto sia per le chiamate che per gli SMS.

Caratteristiche

La versione Android 7.0 introduce un provider di contenuti BlockedNumberProvider che memorizza un elenco di numeri di telefono che l'utente ha specificato non dovrebbe essere in grado di contattarli tramite comunicazioni telefoniche (chiamate, SMS, MMS). Il sistema rispetterà i numeri nell'elenco bloccato limitando le chiamate e gli SMS da tali numeri. Android 7.0 visualizza l'elenco dei numeri bloccati e consente all'utente di aggiungere e rimuovere numeri.

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. Il dialer predefinito, il client di messaggistica predefinito, l'app privilegiata UICC e le app con la stessa firma del sistema possono leggere e scrivere direttamente nell'elenco bloccato. Poiché i numeri bloccati vengono archiviati nel sistema, indipendentemente dall'app di composizione o di messaggistica utilizzata dall'utente, i numeri rimangono bloccati. Infine, la lista dei numeri bloccati potrà essere ripristinata su qualsiasi nuovo dispositivo, indipendentemente dal produttore.

  • All'utente verrà garantita una funzionalità di blocco che funziona immediatamente e non perderà l'elenco di blocco quando cambia app o acquista un nuovo telefono. Tutte le app pertinenti sul sistema possono condividere lo stesso elenco per fornire all'utente l'esperienza più semplificata.
  • Gli sviluppatori di app non hanno bisogno di sviluppare un proprio modo di gestire un elenco di blocchi e le chiamate e i messaggi in arrivo. Possono semplicemente utilizzare la funzionalità fornita dalla piattaforma.
  • Le app di connessione/messaggeria selezionate come predefinite dall'utente possono leggere e scrivere sul provider. Altre app possono avviare l'interfaccia utente di gestione dell'elenco di blocchi utilizzando createManageBlockedNumbersIntent()
  • Gli OEM possono utilizzare la funzionalità fornita dalla piattaforma per fornire una funzionalità di blocco pronta all'uso. Gli OEM possono essere certi che, quando gli utenti passano da un dispositivo di un altro OEM, avranno un'esperienza di onboarding migliore perché verrà trasferito anche l'elenco dei blocchi.
  • Se l'operatore dispone di una propria app dialer o di messaggistica, può riutilizzare la funzionalità della piattaforma per consentire all'utente di mantenere un elenco di blocchi. Possono essere certi che l'elenco di blocco dell'utente rimarrà con gli utenti, anche quando riceveranno un nuovo dispositivo. Infine, tutte le app privilegiate dall'operatore possono leggere l'elenco dei blocchi, quindi se l'operatore desidera fornire all'utente un blocco aggiuntivo più potente in base all'elenco dei blocchi, ciò è ora possibile con questa funzionalità.

Flusso di dati

blocco del flusso di dati dei numeri

Figura 1. Blocco del flusso di dati dei numeri di telefono

Esempi e fonte

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

Avvia il gestore dei numeri bloccati dall'app

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

Interroga i 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);

Metti il ​​numero bloccato

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

Elimina 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

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

  • Gli OEM implementano funzionalità di limitazione delle chiamate/messaggi sui propri dispositivi utilizzando BlockedNumberProvider
  • Se l'operatore dispone di un'applicazione di chiamata o di messaggistica, implementare le funzionalità di restrizione di chiamate/messaggi utilizzando BlockedNumberProvider
  • I fornitori di app dialer e di messaggistica di terze parti utilizzano BlockedNumberProvider per le loro funzionalità di blocco

Raccomandazioni per gli OEM

Se il dispositivo non è mai stato fornito in precedenza 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. Si consiglia di supportare punti di ingresso ragionevoli per il blocco, ad esempio il blocco di un numero direttamente dal registro delle chiamate o all'interno di un thread di messaggi.

Se il dispositivo è stato precedentemente fornito con funzionalità di limitazione di chiamate/messaggi, adattare le funzionalità in modo che tutti i numeri di telefono con corrispondenza rigorosa bloccati vengano archiviati in BlockedNumberProvider, e che il comportamento del provider soddisfi i requisiti per questa funzionalità delineati nella compatibilità Android Documento di definizione (CDD).

Qualsiasi altra funzionalità avanzata può essere implementata tramite provider personalizzati e interfaccia utente/controlli personalizzati, purché siano soddisfatti i requisiti CDD per quanto riguarda il blocco dei numeri di telefono con corrispondenza rigorosa. Si consiglia di etichettare queste altre funzionalità come funzionalità “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
  • Fare 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 del dispositivo possono anche implementare la propria versione dell'interfaccia utente, purché soddisfi i relativi requisiti CDD.

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

interfaccia utente con numeri di blocco

Figura 2. Interfaccia utente dei numeri di telefono bloccati

Validazione

Gli implementatori possono garantire 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 . Per 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