SimPhonebookContract.SimRecords
public
static
final
class
SimPhonebookContract.SimRecords
extends Object
java.lang.Object | |
↳ | android.provider.SimPhonebookContract.SimRecords |
Constants for the contact records on a SIM card.
Data
Data is stored in a specific elementary file on a specific SIM card and these are isolated
from each other. SIM cards are identified by their subscription ID. SIM cards may not support
all or even any of the elementary file types. A SIM will have constraints on
the values of the data that can be stored in each elementary file. The available SIMs,
their supported elementary file types and the constraints on the data can be discovered by
querying ElementaryFiles.CONTENT_URI
. Each elementary file has a fixed capacity
for the number of records that may be stored. This can be determined from the value
of the ElementaryFiles.MAX_RECORDS
column.
The SimRecords.PHONE_NUMBER
column can only contain dialable characters and this
applies regardless of the SIM that is being used. See
PhoneNumberUtils.isDialable(char)
for more details. Additionally
the phone number can contain at most ElementaryFiles.PHONE_NUMBER_MAX_LENGTH
characters. The SimRecords.NAME
column can contain at most
ElementaryFiles.NAME_MAX_LENGTH
bytes when it is encoded for storage on the SIM.
Encoding is done internally and so the name should be provided to these provider APIs as a
Java String but the number of bytes required to encode it for storage will vary depending on
the characters it contains. This length can be determined by calling
SimRecords.getEncodedNameLength(ContentResolver, String)
.
Operations
- Insert
- Update
- Delete
- Query
Only ElementaryFiles.EF_ADN
supports inserts. SimRecords.PHONE_NUMBER
is a required column. If the value provided for this column is missing, null, empty
or violates the requirements discussed in the Data
section above an IllegalArgumentException
will be thrown. The
SimRecords.NAME
column may be omitted but if provided and it violates any of
the requirements discussed in the Data section above
an IllegalArgumentException
will be thrown.
If an insert is not possible because the elementary file is full then an
IllegalStateException
will be thrown.
Updates can only be performed for individual records on ElementaryFiles.EF_ADN
.
A specific record is referenced via the Uri returned by
SimRecords.getItemUri(int, int, int)
. Updates have the same constraints and
behavior for the SimRecords.PHONE_NUMBER
and SimRecords.NAME
as insert.
However, in the case of update the SimRecords.PHONE_NUMBER
may be omitted as
the existing record will already have a valid value.
Delete may only be performed for individual records on ElementaryFiles.EF_ADN
.
Deleting records will free up space for use by future inserts.
All the records stored on a specific elementary file can be read via a Uri returned by
SimRecords.getContentUri(int, int)
. This query always returns all records; there
is no support for filtering via a selection. An individual record can be queried via a Uri
returned by SimRecords.getItemUri(int, int, int)
. Queries will throw an
IllegalArgumentException
when the SIM with the subscription ID or the elementary file
type are invalid or unavailable.
Summary
Constants | |
---|---|
String |
CONTENT_ITEM_TYPE
The MIME type of a CONTENT_URI subdirectory of a single SIM record. |
String |
CONTENT_TYPE
The MIME type of CONTENT_URI providing a directory of SIM records. |
String |
ELEMENTARY_FILE_TYPE
The type of the elementary file the record is from. |
int |
ERROR_NAME_UNSUPPORTED
Value returned from |
String |
NAME
The name for this record. |
String |
PHONE_NUMBER
The phone number for this record. |
String |
RECORD_NUMBER
The 1-based offset of the record in the elementary file that contains it. |
String |
SUBSCRIPTION_ID
The subscription ID of the SIM the record is from. |
Public methods | |
---|---|
static
Uri
|
getContentUri(int subscriptionId, int efType)
Returns the content Uri for the specified elementary file on the specified SIM. |
static
int
|
getEncodedNameLength(ContentResolver resolver, String name)
Returns the number of bytes required to encode the specified name when it is stored on the SIM. |
static
Uri
|
getItemUri(int subscriptionId, int efType, int recordNumber)
Content Uri for the specific SIM record with the provided |
Inherited methods | |
---|---|
Constants
CONTENT_ITEM_TYPE
public static final String CONTENT_ITEM_TYPE
The MIME type of a CONTENT_URI subdirectory of a single SIM record.
Constant Value: "vnd.android.cursor.item/sim-contact_v2"
CONTENT_TYPE
public static final String CONTENT_TYPE
The MIME type of CONTENT_URI providing a directory of SIM records.
Constant Value: "vnd.android.cursor.dir/sim-contact_v2"
ELEMENTARY_FILE_TYPE
public static final String ELEMENTARY_FILE_TYPE
The type of the elementary file the record is from.
See also:
Constant Value: "elementary_file_type"
ERROR_NAME_UNSUPPORTED
public static final int ERROR_NAME_UNSUPPORTED
Value returned from getEncodedNameLength(android.content.ContentResolver, java.lang.String)
when the name
length could not be determined because the name could not be encoded.
Constant Value: -1 (0xffffffff)
NAME
public static final String NAME
The name for this record.
An IllegalArgumentException
will be thrown by insert and update if this
exceeds the maximum supported length. Use
getEncodedNameLength(android.content.ContentResolver, java.lang.String)
to check how long the name
will be after encoding.
See also:
Constant Value: "name"
PHONE_NUMBER
public static final String PHONE_NUMBER
The phone number for this record.
Only dialable characters are supported.
An IllegalArgumentException
will be thrown by insert and update if this
exceeds the maximum supported length or contains unsupported characters.
See also:
Constant Value: "phone_number"
RECORD_NUMBER
public static final String RECORD_NUMBER
The 1-based offset of the record in the elementary file that contains it.
This can be used to access individual SIM records by appending it to the elementary file URIs but it is not like a normal database ID because it is not auto-incrementing and it is not unique across SIM cards or elementary files. Hence, care should be taken when using it to ensure that it is applied to the correct SIM and EF.
See also:
Constant Value: "record_number"
SUBSCRIPTION_ID
public static final String SUBSCRIPTION_ID
The subscription ID of the SIM the record is from.
See also:
Constant Value: "subscription_id"
Public methods
getContentUri
public static Uri getContentUri (int subscriptionId, int efType)
Returns the content Uri for the specified elementary file on the specified SIM.
When queried this Uri will return all of the contact records in the specified
elementary file on the specified SIM. The available subscriptionIds and efTypes can
be discovered by querying ElementaryFiles.CONTENT_URI
.
If a SIM with the provided subscription ID does not exist or the SIM with the provided
subscription ID doesn't support the specified entity file then all operations will
throw an IllegalArgumentException
.
Parameters | |
---|---|
subscriptionId |
int : the subscriptionId of the SIM card that this Uri will reference |
efType |
int : the elementary file on the SIM that this Uri will reference
Value is SimPhonebookContract.ElementaryFiles.EF_UNKNOWN , SimPhonebookContract.ElementaryFiles.EF_ADN , SimPhonebookContract.ElementaryFiles.EF_FDN , or SimPhonebookContract.ElementaryFiles.EF_SDN |
Returns | |
---|---|
Uri |
This value cannot be null . |
getEncodedNameLength
public static int getEncodedNameLength (ContentResolver resolver, String name)
Returns the number of bytes required to encode the specified name when it is stored on the SIM.
ElementaryFiles.NAME_MAX_LENGTH
is specified in bytes but the encoded name
may require more than 1 byte per character depending on the characters it contains. So
this method can be used to check whether a name exceeds the max length.
This method may take several seconds to complete, so it should
only be called from a worker thread.
Parameters | |
---|---|
resolver |
ContentResolver : This value cannot be null . |
name |
String : This value cannot be null . |
Returns | |
---|---|
int |
the number of bytes required by the encoded name or
ERROR_NAME_UNSUPPORTED if the name could not be encoded.
Value is 0 or greater |
Throws | |
---|---|
IllegalStateException |
if the provider fails to return the length. |
getItemUri
public static Uri getItemUri (int subscriptionId, int efType, int recordNumber)
Content Uri for the specific SIM record with the provided RECORD_NUMBER
.
When queried this will return the record identified by the provided arguments.
For a non-existent record:
- query will return an empty cursor
- update will return 0
- delete will return 0
Parameters | |
---|---|
subscriptionId |
int : the subscription ID of the SIM containing the record. If no SIM
with this subscription ID exists then it will be treated as a
non-existent record |
efType |
int : the elementary file type containing the record. If the specified
SIM doesn't support this elementary file then it will be treated
as a non-existent record.
Value is SimPhonebookContract.ElementaryFiles.EF_UNKNOWN , SimPhonebookContract.ElementaryFiles.EF_ADN , SimPhonebookContract.ElementaryFiles.EF_FDN , or SimPhonebookContract.ElementaryFiles.EF_SDN |
recordNumber |
int : the record number of the record this Uri should reference. This
must be greater than 0. If there is no record with this record
number in the specified entity file then it will be treated as a
non-existent record.
Value is 1 or greater |
Returns | |
---|---|
Uri |
This value cannot be null . |