FileDocCategorySizeDatePackage
SmsCbMessage.javaAPI DocAndroid 5.1 API15332Thu Mar 12 22:22:54 GMT 2015android.telephony

SmsCbMessage

public class SmsCbMessage extends Object implements android.os.Parcelable
Parcelable object containing a received cell broadcast message. There are four different types of Cell Broadcast messages:
  • opt-in informational broadcasts, e.g. news, weather, stock quotes, sports scores
  • cell information messages, broadcast on channel 50, indicating the current cell name for roaming purposes (required to display on the idle screen in Brazil)
  • emergency broadcasts for the Japanese Earthquake and Tsunami Warning System (ETWS)
  • emergency broadcasts for the American Commercial Mobile Alert Service (CMAS)

There are also four different CB message formats: GSM, ETWS Primary Notification (GSM only), UMTS, and CDMA. Some fields are only applicable for some message formats. Other fields were unified under a common name, avoiding some names, such as "Message Identifier", that refer to two completely different concepts in 3GPP and CDMA.

The GSM/UMTS Message Identifier field is available via {@link #getServiceCategory}, the name of the equivalent field in CDMA. In both cases the service category is a 16-bit value, but 3GPP and 3GPP2 have completely different meanings for the respective values. For ETWS and CMAS, the application should

The CDMA Message Identifier field is available via {@link #getSerialNumber}, which is used to detect the receipt of a duplicate message to be discarded. In CDMA, the message ID is unique to the current PLMN. In GSM/UMTS, there is a 16-bit serial number containing a 2-bit Geographical Scope field which indicates whether the 10-bit message code and 4-bit update number are considered unique to the PLMN, to the current cell, or to the current Location Area (or Service Area in UMTS). The relevant values are concatenated into a single String which will be unique if the messages are not duplicates.

The SMS dispatcher does not detect duplicate messages. However, it does concatenate the pages of a GSM multi-page cell broadcast into a single SmsCbMessage object.

Interested applications with {@code RECEIVE_SMS_PERMISSION} can register to receive {@code SMS_CB_RECEIVED_ACTION} broadcast intents for incoming non-emergency broadcasts. Only system applications such as the CellBroadcastReceiver may receive notifications for emergency broadcasts (ETWS and CMAS). This is intended to prevent any potential for delays or interference with the immediate display of the alert message and playing of the alert sound and vibration pattern, which could be caused by poorly written or malicious non-system code.

hide

Fields Summary
protected static final String
LOG_TAG
public static final int
GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE
Cell wide geographical scope with immediate display (GSM/UMTS only).
public static final int
GEOGRAPHICAL_SCOPE_PLMN_WIDE
PLMN wide geographical scope (GSM/UMTS and all CDMA broadcasts).
public static final int
GEOGRAPHICAL_SCOPE_LA_WIDE
Location / service area wide geographical scope (GSM/UMTS only).
public static final int
GEOGRAPHICAL_SCOPE_CELL_WIDE
Cell wide geographical scope (GSM/UMTS only).
public static final int
MESSAGE_FORMAT_3GPP
GSM or UMTS format cell broadcast.
public static final int
MESSAGE_FORMAT_3GPP2
CDMA format cell broadcast.
public static final int
MESSAGE_PRIORITY_NORMAL
Normal message priority.
public static final int
MESSAGE_PRIORITY_INTERACTIVE
Interactive message priority.
public static final int
MESSAGE_PRIORITY_URGENT
Urgent message priority.
public static final int
MESSAGE_PRIORITY_EMERGENCY
Emergency message priority.
private final int
mMessageFormat
Format of this message (for interpretation of service category values).
private final int
mGeographicalScope
Geographical scope of broadcast.
private final int
mSerialNumber
Serial number of broadcast (message identifier for CDMA, geographical scope + message code + update number for GSM/UMTS). The serial number plus the location code uniquely identify a cell broadcast for duplicate detection.
private final SmsCbLocation
mLocation
Location identifier for this message. It consists of the current operator MCC/MNC as a 5 or 6-digit decimal string. In addition, for GSM/UMTS, if the Geographical Scope of the message is not binary 01, the Location Area is included for comparison. If the GS is 00 or 11, the Cell ID is also included. LAC and Cell ID are -1 if not specified.
private final int
mServiceCategory
16-bit CDMA service category or GSM/UMTS message identifier. For ETWS and CMAS warnings, the information provided by the category is also available via {@link #getEtwsWarningInfo()} or {@link #getCmasWarningInfo()}.
private final String
mLanguage
Message language, as a two-character string, e.g. "en".
private final String
mBody
Message body, as a String.
private final int
mPriority
Message priority (including emergency priority).
private final SmsCbEtwsInfo
mEtwsWarningInfo
ETWS warning notification information (ETWS warnings only).
private final SmsCbCmasInfo
mCmasWarningInfo
CMAS warning notification information (CMAS warnings only).
public static final Parcelable.Creator
CREATOR
Constructors Summary
public SmsCbMessage(int messageFormat, int geographicalScope, int serialNumber, SmsCbLocation location, int serviceCategory, String language, String body, int priority, SmsCbEtwsInfo etwsWarningInfo, SmsCbCmasInfo cmasWarningInfo)
Create a new SmsCbMessage with the specified data.


                 
          
                   
                  
        mMessageFormat = messageFormat;
        mGeographicalScope = geographicalScope;
        mSerialNumber = serialNumber;
        mLocation = location;
        mServiceCategory = serviceCategory;
        mLanguage = language;
        mBody = body;
        mPriority = priority;
        mEtwsWarningInfo = etwsWarningInfo;
        mCmasWarningInfo = cmasWarningInfo;
    
public SmsCbMessage(android.os.Parcel in)
Create a new SmsCbMessage object from a Parcel.

        mMessageFormat = in.readInt();
        mGeographicalScope = in.readInt();
        mSerialNumber = in.readInt();
        mLocation = new SmsCbLocation(in);
        mServiceCategory = in.readInt();
        mLanguage = in.readString();
        mBody = in.readString();
        mPriority = in.readInt();
        int type = in.readInt();
        switch (type) {
            case 'E":
                // unparcel ETWS warning information
                mEtwsWarningInfo = new SmsCbEtwsInfo(in);
                mCmasWarningInfo = null;
                break;

            case 'C":
                // unparcel CMAS warning information
                mEtwsWarningInfo = null;
                mCmasWarningInfo = new SmsCbCmasInfo(in);
                break;

            default:
                mEtwsWarningInfo = null;
                mCmasWarningInfo = null;
        }
    
Methods Summary
public intdescribeContents()
Describe the kinds of special objects contained in the marshalled representation.

return
a bitmask indicating this Parcelable contains no special objects

        return 0;
    
public SmsCbCmasInfogetCmasWarningInfo()
If this is a CMAS warning notification then this method will return an object containing the CMAS message class, category, response type, severity, urgency and certainty. The message class is always present. Severity, urgency and certainty are present for CDMA warning notifications containing a type 1 elements record and for GSM and UMTS warnings except for the Presidential-level alert category. Category and response type are only available for CDMA notifications containing a type 1 elements record.

return
an SmsCbCmasInfo object, or null if this is not a CMAS warning notification

        return mCmasWarningInfo;
    
public SmsCbEtwsInfogetEtwsWarningInfo()
If this is an ETWS warning notification then this method will return an object containing the ETWS warning type, the emergency user alert flag, and the popup flag. If this is an ETWS primary notification (GSM only), there will also be a 7-byte timestamp and 43-byte digital signature. As of Release 10, 3GPP TS 23.041 states that the UE shall ignore the ETWS primary notification timestamp and digital signature if received.

return
an SmsCbEtwsInfo object, or null if this is not an ETWS warning notification

        return mEtwsWarningInfo;
    
public intgetGeographicalScope()
Return the geographical scope of this message (GSM/UMTS only).

return
Geographical scope


                     
       
        return mGeographicalScope;
    
public java.lang.StringgetLanguageCode()
Get the ISO-639-1 language code for this message, or null if unspecified

return
Language code

        return mLanguage;
    
public SmsCbLocationgetLocation()
Return the location identifier for this message, consisting of the MCC/MNC as a 5 or 6-digit decimal string. In addition, for GSM/UMTS, if the Geographical Scope of the message is not binary 01, the Location Area is included. If the GS is 00 or 11, the cell ID is also included. The {@link SmsCbLocation} object includes a method to test if the location is included within another location area or within a PLMN and CellLocation.

return
the geographical location code for duplicate message detection

        return mLocation;
    
public java.lang.StringgetMessageBody()
Get the body of this message, or null if no body available

return
Body, or null

        return mBody;
    
public intgetMessageFormat()
Get the message format ({@link #MESSAGE_FORMAT_3GPP} or {@link #MESSAGE_FORMAT_3GPP2}).

return
an integer representing 3GPP or 3GPP2 message format

        return mMessageFormat;
    
public intgetMessagePriority()
Get the message priority. Normal broadcasts return {@link #MESSAGE_PRIORITY_NORMAL} and emergency broadcasts return {@link #MESSAGE_PRIORITY_EMERGENCY}. CDMA also may return {@link #MESSAGE_PRIORITY_INTERACTIVE} or {@link #MESSAGE_PRIORITY_URGENT}.

return
an integer representing the message priority

        return mPriority;
    
public intgetSerialNumber()
Return the broadcast serial number of broadcast (message identifier for CDMA, or geographical scope + message code + update number for GSM/UMTS). The serial number plus the location code uniquely identify a cell broadcast for duplicate detection.

return
the 16-bit CDMA message identifier or GSM/UMTS serial number

        return mSerialNumber;
    
public intgetServiceCategory()
Return the 16-bit CDMA service category or GSM/UMTS message identifier. The interpretation of the category is radio technology specific. For ETWS and CMAS warnings, the information provided by the category is available via {@link #getEtwsWarningInfo()} or {@link #getCmasWarningInfo()} in a radio technology independent format.

return
the radio technology specific service category

        return mServiceCategory;
    
public booleanisCmasMessage()
Return whether this message is a CMAS warning alert.

return
true if the message is a CMAS warning notification; false otherwise

        return mCmasWarningInfo != null;
    
public booleanisEmergencyMessage()
Return whether this message is an emergency (PWS) message type.

return
true if the message is a public warning notification; false otherwise

        return mPriority == MESSAGE_PRIORITY_EMERGENCY;
    
public booleanisEtwsMessage()
Return whether this message is an ETWS warning alert.

return
true if the message is an ETWS warning notification; false otherwise

        return mEtwsWarningInfo != null;
    
public java.lang.StringtoString()

        return "SmsCbMessage{geographicalScope=" + mGeographicalScope + ", serialNumber="
                + mSerialNumber + ", location=" + mLocation + ", serviceCategory="
                + mServiceCategory + ", language=" + mLanguage + ", body=" + mBody
                + ", priority=" + mPriority
                + (mEtwsWarningInfo != null ? (", " + mEtwsWarningInfo.toString()) : "")
                + (mCmasWarningInfo != null ? (", " + mCmasWarningInfo.toString()) : "") + '}";
    
public voidwriteToParcel(android.os.Parcel dest, int flags)
Flatten this object into a Parcel.

param
dest The Parcel in which the object should be written.
param
flags Additional flags about how the object should be written (ignored).

        dest.writeInt(mMessageFormat);
        dest.writeInt(mGeographicalScope);
        dest.writeInt(mSerialNumber);
        mLocation.writeToParcel(dest, flags);
        dest.writeInt(mServiceCategory);
        dest.writeString(mLanguage);
        dest.writeString(mBody);
        dest.writeInt(mPriority);
        if (mEtwsWarningInfo != null) {
            // parcel ETWS warning information
            dest.writeInt('E");
            mEtwsWarningInfo.writeToParcel(dest, flags);
        } else if (mCmasWarningInfo != null) {
            // parcel CMAS warning information
            dest.writeInt('C");
            mCmasWarningInfo.writeToParcel(dest, flags);
        } else {
            // no ETWS or CMAS warning information
            dest.writeInt('0");
        }