Most visited

Recently visited

Added in API level 24

BlockedNumberContract

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定义的持续时间内,平台禁用号码阻止。

Permissions

只有系统,默认SMS应用程序和默认电话应用程序(请参阅getDefaultDialerPackage() )和运营商应用程序(请参阅CarrierService )可以读取并写入阻止的数字提供商。 但是,任何应用程序都可以访问canCurrentUserBlockNumbers(Context)

Data

除了普通的电话号码,被阻止的号码提供商还可以存储用户可以从中接收消息的地址(例如电子邮件)以及呼叫。 被阻止的号码存储在COLUMN_ORIGINAL_NUMBER列中。 电话号码的规范化版本(如果规范化可能)存储在COLUMN_E164_NUMBER列中。 如果地址存在于COLUMN_ORIGINAL_NUMBER列中,或者地址的E164版本与COLUMN_E164_NUMBER列匹配,平台将阻止呼叫和来自地址的消息。

Operations

Insert

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

Update

更新不受支持。 使用删除,然后插入。

Delete

删除可以执行如下:

 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).

Query

所有被阻止的数字可以枚举如下:

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

Unblock

使用方法 unblock(Context, String)来取消阻止号码。

Multi-user

在对阻止的号码提供商执行任何操作之前,应用必须使用方法canCurrentUserBlockNumbers(Context) 如果canCurrentUserBlockNumbers(Context)返回false ,则提供程序上的所有操作都将失败,并显示SecurityException 该平台将阻止呼叫,并且来自提供商中号码的消息独立于当前用户。

Summary

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)

如果被阻止,则 phoneNumber阻止 phoneNumber

Inherited methods

From class java.lang.Object

Constants

AUTHORITY

Added in API level 24
String AUTHORITY

被阻止的号码提供商的权限

常量值:“com.android.blockednumber”

Fields

AUTHORITY_URI

Added in API level 24
Uri AUTHORITY_URI

内容:// style uri给被阻止号码提供商的权限

Public methods

canCurrentUserBlockNumbers

Added in API level 24
boolean canCurrentUserBlockNumbers (Context context)

检查当前用户是否支持阻止号码。

通常,阻止号码一次只支持一个用户。

Parameters
context Context
Returns
boolean true if the current user can block numbers.

isBlocked

Added in API level 24
boolean isBlocked (Context context, 
                String phoneNumber)

返回给定的号码是否在阻止列表中。

这符合 phoneNumberCOLUMN_ORIGINAL_NUMBER列,的E164表示 phoneNumberCOLUMN_E164_NUMBER列。

请注意,如果 canCurrentUserBlockNumbers(Context)false的用户上下文 context ,此方法将抛出一个 SecurityException

Parameters
context Context
phoneNumber String
Returns
boolean true if the phoneNumber is blocked.

unblock

Added in API level 24
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.

Hooray!