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 desiderato o di fornire un'esperienza non ottimale perché non esistono API appropriate per bloccare chiamate e messaggi.

Alcuni produttori potrebbero fornire già soluzioni predefinite di blocco, ma se gli utenti cambiano dispositivo, potrebbero perdere del tutto l'elenco dei dispositivi bloccati per mancanza dell'interoperabilità. Infine, anche se gli utenti utilizzano app per chiamare e ai client di messaggistica che offrono queste funzionalità, è probabile che esegui l'azione di blocco in ogni app affinché il blocco venga applicato a entrambe le app chiamate e messaggi.

Funzionalità

Nella release Android 7.0 sono stati introdotti contenuti BlockedNumberProvider fornitore che memorizza un elenco di numeri di telefono specificati dall'utente, essere in grado di contattarli attraverso comunicazioni telefoniche (chiamate, SMS, MMS). La il sistema rispetterà i numeri nell'elenco dei numeri bloccati, limitando le chiamate SMS da questi numeri. Android 7.0 mostra l'elenco dei numeri bloccati e consente all'utente di aggiungere e rimuovere numeri.

Inoltre, la funzione di blocco del numero consente al sistema e alle app pertinenti la piattaforma di collaborare per contribuire a proteggere l'utente e semplificare un'esperienza senza intervento manuale. 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 memorizzati 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, a prescindere dal produttore.

  • All'utente verrà garantita una funzionalità di blocco pronta all'uso e non perderà la lista bloccata quando cambia app o acquista un nuovo telefono. 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 autonomamente un metodo per gestire un elenco di utenti bloccati nonché 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 la gestione degli elenchi di blocco dell'interfaccia utente utilizzando createManageBlockedNumbersIntent()
  • Gli OEM possono utilizzare la funzionalità fornita dalla piattaforma per fornire una funzionalità di blocco pronte all'uso. Gli OEM possono avere la certezza che quando gli utenti passano da un altro OEM dispositivo in modo che possano avere un'esperienza di onboarding migliore, in quanto trasferire a sua volta.
  • Se l'operatore ha una propria app Telefono o Messenger, può riutilizzare la piattaforma per consentire all'utente di gestire un elenco di utenti bloccati. 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

flusso di dati per numeri a blocchi

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

Esempi e fonte

Di seguito sono riportati alcuni esempi di chiamate in cui viene utilizzata la nuova funzione di blocco del numero:

Avvia il gestore dei numeri bloccato dall'app

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

Query su 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 numero bloccato

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

Elimina 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 porre le funzionalità da usare:

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

Consigli per gli OEM

Se il dispositivo non era mai stato spedito con chiamate o messaggi aggiuntivi le funzionalità di limitazione, usa la funzione di blocco numeri nell'open source di Android Project (AOSP) su tutti questi dispositivi. È consigliabile inserire un valore ragionevole sono supportati i punti di accesso per il blocco, ad esempio il blocco di un numero direttamente dalla chiamata 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 siano 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 provider personalizzati e UI personalizzate purché siano soddisfatti i requisiti del CDD in materia di bloccare i numeri di telefono con corrispondenza rigida. È consigliabile che queste altre funzionalità Essere etichettata come "avanzata" per evitare confusione con le funzionalità funzione di blocco dei numeri.

API

Ecco le API in uso:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Consulta 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 BlockNumbersActivity.java fornita in AOSP può essere utilizzata come dall'indirizzo IP interno. Gli utenti che implementano i dispositivi possono anche implementare la propria versione dell'interfaccia utente, purché soddisfi i relativi requisiti CDD.

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

interfaccia utente per i numeri di blocco

Figura 2. Blocca l'interfaccia utente dei 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

L'elemento BlockedNumberProvider può essere modificato usando 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