public class BlockedNumberContract
extends Object
java.lang.Object | |
↳ | android.provider.BlockedNumberContract |
阻止的数字提供商与应用程序之间的合同。 包含支持的URI和列的定义。
内容提供者公开包含被阻止的数字的表格。 用于访问此表的列和URI由BlockedNumberContract.BlockedNumbers
类定义。 消息和来自阻止号码的呼叫被平台丢弃。 可以使用ContentObserver
接收提供者更改的通知。
该平台不会阻止消息,并按照isEmergencyNumber(String)
定义的紧急号码进行isEmergencyNumber(String)
。 如果用户联系紧急服务,则在KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
定义的持续时间内,平台禁用号码阻止。
只有系统,默认SMS应用程序和默认电话应用程序(请参阅getDefaultDialerPackage()
)和运营商应用程序(请参阅CarrierService
)可以读取并写入阻止的数字提供商。 但是,任何应用程序都可以访问canCurrentUserBlockNumbers(Context)
。
除了普通的电话号码,被阻止的号码提供商还可以存储用户可以从中接收消息的地址(例如电子邮件)以及呼叫。 被阻止的号码存储在COLUMN_ORIGINAL_NUMBER
列中。 电话号码的规范化版本(如果规范化可能)存储在COLUMN_E164_NUMBER
列中。 如果地址存在于COLUMN_ORIGINAL_NUMBER
列中,或者地址的E164版本与COLUMN_E164_NUMBER
列匹配,平台将阻止呼叫和来自地址的消息。
COLUMN_ORIGINAL_NUMBER
是需要填充的必填列。 应用程序可以选择提供COLUMN_E164_NUMBER
,这是电话号码的E164表示。 如果应用程序不提供它,提供程序会自动填充此列。 请注意,如果规范化失败或地址不是电话号码(例如:电子邮件),则不会填充此列。
尝试插入现有的阻止号码(相同的 COLUMN_ORIGINAL_NUMBER
列)将导致替换现有的阻止号码。
例子:
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); values.put(BlockedNumbers.COLUMN_E164_NUMBER, "+11234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "[email protected]"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
更新不受支持。 使用删除,然后插入。
删除可以执行如下:
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values); getContentResolver().delete(uri, null, null);To check if a particular number is blocked, use the method
isBlocked(Context, String)
.
所有被阻止的数字可以枚举如下:
Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI, new String[]{BlockedNumbers.COLUMN_ID, BlockedNumbers.COLUMN_ORIGINAL_NUMBER, BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);
使用方法 unblock(Context, String)
来取消阻止号码。
在对阻止的号码提供商执行任何操作之前,应用必须使用方法canCurrentUserBlockNumbers(Context)
。 如果canCurrentUserBlockNumbers(Context)
返回false
,则提供程序上的所有操作都将失败,并显示SecurityException
。 该平台将阻止呼叫,并且来自提供商中号码的消息独立于当前用户。
Nested classes |
|
---|---|
class |
BlockedNumberContract.BlockedNumbers 常量与阻止的号码列表进行交互。 |
Constants |
|
---|---|
String |
AUTHORITY 被阻止的号码提供商的权限 |
Fields |
|
---|---|
public static final Uri |
AUTHORITY_URI 内容:// style uri给被阻止号码提供商的权限 |
Public methods |
|
---|---|
static boolean |
canCurrentUserBlockNumbers(Context context) 检查当前用户是否支持阻止号码。 |
static boolean |
isBlocked(Context context, String phoneNumber) 返回给定的号码是否在阻止列表中。 |
static int |
unblock(Context context, String phoneNumber) 如果被阻止,则 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
boolean canCurrentUserBlockNumbers (Context context)
检查当前用户是否支持阻止号码。
通常,阻止号码一次只支持一个用户。
Parameters | |
---|---|
context |
Context
|
Returns | |
---|---|
boolean |
true if the current user can block numbers. |
boolean isBlocked (Context context, String phoneNumber)
返回给定的号码是否在阻止列表中。
这符合 phoneNumber
对 COLUMN_ORIGINAL_NUMBER
列,的E164表示 phoneNumber
与 COLUMN_E164_NUMBER
列。
请注意,如果 canCurrentUserBlockNumbers(Context)
为 false
的用户上下文 context
,此方法将抛出一个 SecurityException
。
Parameters | |
---|---|
context |
Context
|
phoneNumber |
String
|
Returns | |
---|---|
boolean |
true if the phoneNumber is blocked. |
int unblock (Context context, String phoneNumber)
如果阻止,则 phoneNumber
阻止 phoneNumber
。
这将删除其中的所有行 phoneNumber
匹配 COLUMN_ORIGINAL_NUMBER
列或的E164表示 phoneNumber
的匹配 COLUMN_E164_NUMBER
柱。
要根据与特定列(如 COLUMN_ID
完全匹配删除行, COLUMN_ID
使用 delete(Uri, String, String[])
和 CONTENT_URI
URI。
请注意,如果 canCurrentUserBlockNumbers(Context)
为 false
的用户上下文 context
,此方法将抛出一个 SecurityException
。
Parameters | |
---|---|
context |
Context
|
phoneNumber |
String
|
Returns | |
---|---|
int |
the number of rows deleted in the blocked number provider as a result of unblock. |