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
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)
- API fornite da
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.
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