SimRecords
class SimRecords
kotlin.Any | |
↳ | 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 android.telephony.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 | |
---|---|
static String |
The MIME type of a CONTENT_URI subdirectory of a single SIM record. |
static String |
The MIME type of CONTENT_URI providing a directory of SIM records. |
static String |
The type of the elementary file the record is from. |
static Int |
Value returned from |
static String |
The name for this record. |
static String |
The phone number for this record. |
static String |
The 1-based offset of the record in the elementary file that contains it. |
static String |
The subscription ID of the SIM the record is from. |
Public methods | |
---|---|
static Uri |
getContentUri(subscriptionId: Int, efType: Int) Returns the content Uri for the specified elementary file on the specified SIM. |
static Int |
getEncodedNameLength(resolver: ContentResolver, name: String) Returns the number of bytes required to encode the specified name when it is stored on the SIM. |
static Uri |
getItemUri(subscriptionId: Int, efType: Int, recordNumber: Int) Content Uri for the specific SIM record with the provided |
Constants
CONTENT_ITEM_TYPE
static val CONTENT_ITEM_TYPE: String
The MIME type of a CONTENT_URI subdirectory of a single SIM record.
Value: "vnd.android.cursor.item/sim-contact_v2"
CONTENT_TYPE
static val CONTENT_TYPE: String
The MIME type of CONTENT_URI providing a directory of SIM records.
Value: "vnd.android.cursor.dir/sim-contact_v2"
ELEMENTARY_FILE_TYPE
static val ELEMENTARY_FILE_TYPE: String
The type of the elementary file the record is from.
Value: "elementary_file_type"
ERROR_NAME_UNSUPPORTED
static val ERROR_NAME_UNSUPPORTED: Int
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.
Value: -1
NAME
static val NAME: String
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.
Value: "name"
PHONE_NUMBER
static val PHONE_NUMBER: String
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.
Value: "phone_number"
RECORD_NUMBER
static val RECORD_NUMBER: String
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.
Value: "record_number"
See Also
SUBSCRIPTION_ID
static val SUBSCRIPTION_ID: String
The subscription ID of the SIM the record is from.
Value: "subscription_id"
Public methods
getContentUri
static fun getContentUri(
subscriptionId: Int,
efType: Int
): Uri
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 android.provider.SimPhonebookContract.ElementaryFiles#EF_UNKNOWN , android.provider.SimPhonebookContract.ElementaryFiles#EF_ADN , android.provider.SimPhonebookContract.ElementaryFiles#EF_FDN , or android.provider.SimPhonebookContract.ElementaryFiles#EF_SDN |
Return | |
---|---|
Uri |
This value cannot be null . |
getEncodedNameLength
static fun getEncodedNameLength(
resolver: ContentResolver,
name: String
): Int
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 . |
Return | |
---|---|
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 |
Exceptions | |
---|---|
java.lang.IllegalStateException |
if the provider fails to return the length. |
getItemUri
static fun getItemUri(
subscriptionId: Int,
efType: Int,
recordNumber: Int
): Uri
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 android.provider.SimPhonebookContract.ElementaryFiles#EF_UNKNOWN , android.provider.SimPhonebookContract.ElementaryFiles#EF_ADN , android.provider.SimPhonebookContract.ElementaryFiles#EF_FDN , or android.provider.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 |
Return | |
---|---|
Uri |
This value cannot be null . |