# çŸä¿¡æœåŠ¡ ## åœºæ™¯ä»‹ç» çŸä¿¡æœåŠ¡æ¨¡å—æä¾›äº†ç®¡ç†çŸä¿¡çš„一些基础能力,包括创建ã€å‘é€çŸä¿¡ï¼ŒèŽ·å–ã€è®¾ç½®å‘é€çŸä¿¡çš„默认SIM塿§½ID,获å–ã€è®¾ç½®çŸä¿¡æœåŠ¡ä¸å¿ƒåœ°å€ï¼Œä»¥åŠæ£€æŸ¥å½“å‰è®¾å¤‡æ˜¯å¦å…·å¤‡çŸä¿¡å‘é€å’ŒæŽ¥æ”¶èƒ½åŠ›ç‰ã€‚ ## 基本概念 - çŸä¿¡æœåŠ¡ å³SMS(Short Messaging Service),是一ç§å˜å‚¨å’Œè½¬å‘æœåŠ¡ã€‚ç”¨æˆ·çš„ç§»åŠ¨ç”µè¯å¯ä»¥é€šè¿‡å®ƒè¿›è¡Œç›¸äº’æ”¶å‘çŸä¿¡ï¼Œå†…å®¹ä»¥æ–‡æœ¬ã€æ•°å—æˆ–äºŒè¿›åˆ¶éžæ–‡æœ¬æ•°æ®ä¸ºä¸»ã€‚å‘逿–¹çš„ä¿¡æ¯é€šè¿‡çŸä¿¡æœåŠ¡ä¸å¿ƒè¿›è¡Œå‚¨å˜å¹¶è½¬å‘给接收方。 - çŸä¿¡æœåŠ¡ä¸å¿ƒ å³SMSC(Short Message Service Center),负责在基站和移动设备间ä¸ç»§ã€å‚¨å˜æˆ–转å‘çŸæ¶ˆæ¯ã€‚移动设备到çŸä¿¡æœåŠ¡ä¸å¿ƒçš„åè®®èƒ½ä¼ è¾“æ¥è‡ªç§»åŠ¨è®¾å¤‡æˆ–æœå‘ç§»åŠ¨è®¾å¤‡çš„çŸæ¶ˆæ¯ï¼Œå议内容éµä»ŽGSM 03.40å议。 - å议数æ®å•å…ƒ å³PDU(Protocol Data Unit),PDUæ¨¡å¼æ”¶å‘çŸä¿¡å¯ä»¥ä½¿ç”¨3ç§ç¼–ç :7-bitã€8-bitå’ŒUCS-2ç¼–ç 。7-bitç¼–ç 用于å‘逿™®é€šçš„ASCIIå—符,8-bitç¼–ç 通常用于å‘逿•°æ®çŸä¿¡ï¼ŒUCS-2ç¼–ç 用于å‘é€Unicodeå—符。 ## 约æŸä¸Žé™åˆ¶ 1. 仅支æŒåœ¨æ ‡å‡†ç³»ç»Ÿä¸Šè¿è¡Œã€‚ 2. 需授予å‘é€çŸä¿¡æƒé™ä¸”æ’å…¥SIM塿‰å¯æˆåŠŸå‘é€çŸä¿¡ã€‚ ## 接å£è¯´æ˜Ž > **说明:** > 为了ä¿è¯åº”用的è¿è¡Œæ•ˆçŽ‡ï¼Œå¤§éƒ¨åˆ†API调用都是异æ¥çš„,对于异æ¥è°ƒç”¨çš„APIå‡æä¾›äº†callbackå’ŒPromiseä¸¤ç§æ–¹å¼ï¼Œä»¥ä¸‹ç¤ºä¾‹å‡é‡‡ç”¨callback函数,更多方å¼å¯ä»¥æŸ¥é˜…[APIå‚考](../reference/apis-telephony-kit/js-apis-sms.md)。 | 接å£å | æè¿° | | ------------------------------------------------------------ | ------------------------------------------------------- | | sendShortMessage(options: SendMessageOptions, callback: AsyncCallback\<void\>): void | å‘逿–‡æœ¬æˆ–æ•°æ®SMS消æ¯ã€‚需è¦é…ç½®ohos.permission.SEND_MESSAGESæƒé™ï¼Œè¯¥æƒé™ä»…系统应用å¯ç”³è¯·ã€‚ | | createMessage(pdu: Array\<number\>, specification: string, callback: AsyncCallback\<ShortMessage\>): void | 基于å议数æ®å•元(PDU)和指定的SMSå议创建SMS消æ¯å®žä¾‹ã€‚ | | getDefaultSmsSlotId(callback: AsyncCallback\<number\>): void | 获å–用于å‘é€çŸä¿¡çš„默认SIMå¡ã€‚ | | <!--DelRow-->setSmscAddr(slotId: number, smscAddr: string, callback: AsyncCallback\<void\>): void | æ ¹æ®æŒ‡å®šçš„æ’æ§½ID设置çŸä¿¡æœåŠ¡ä¸å¿ƒçš„地å€ã€‚ | | <!--DelRow-->getSmscAddr(slotId: number, callback: AsyncCallback\<string>): void | æ ¹æ®æŒ‡å®šçš„æ’æ§½ID获å–çŸä¿¡æœåŠ¡ä¸å¿ƒåœ°å€ã€‚ | <!--Del--> ## 开呿¥éª¤ï¼ˆä»…供系统应用使用) 1. 声明接å£è°ƒç”¨æ‰€éœ€è¦çš„æƒé™ï¼š - 如果是想å‘é€çŸä¿¡ï¼Œåˆ™è°ƒç”¨sendShortMessage接å£ï¼Œéœ€è¦é…ç½®ohos.permission.SEND_MESSAGESæƒé™ï¼Œæƒé™çº§åˆ«ä¸ºsystem_basic。 - 如果是想设置çŸä¿¡æœåŠ¡ä¸å¿ƒåœ°å€ï¼Œåˆ™è°ƒç”¨setSmscAddr接å£ï¼Œéœ€è¦é…ç½®ohos.permission.SET_TELEPHONY_STATEæƒé™ï¼Œæƒé™çº§åˆ«ä¸ºsystem_basic。 - 如果是想获å–çŸä¿¡æœåŠ¡ä¸å¿ƒåœ°å€ï¼Œåˆ™è°ƒç”¨getSmscAddr接å£ï¼Œéœ€è¦é…ç½®ohos.permission.GET_TELEPHONY_STATEæƒé™ï¼Œæƒé™çº§åˆ«ä¸ºsystem_basic。 在申请æƒé™å‰ï¼Œè¯·ä¿è¯ç¬¦åˆ[æƒé™ä½¿ç”¨çš„基本原则](../security/AccessToken/app-permission-mgmt-overview.md#æƒé™ä½¿ç”¨çš„基本原则)。然åŽå‚考[申请应用æƒé™](../security/AccessToken/determine-application-mode.md#system_basicç‰çº§åº”用申请æƒé™çš„æ–¹å¼)声明对应æƒé™ã€‚ 2. import需è¦çš„æ¨¡å—。 3. å‘é€SMS消æ¯ã€‚ ```ts // 示例代ç import { sms } from '@kit.TelephonyKit'; import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; let sendCallback: AsyncCallback<sms.ISendShortMessageCallback> = (err: BusinessError, data: sms.ISendShortMessageCallback) => { console.log(`sendCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); } let deliveryCallback: AsyncCallback<sms.IDeliveryShortMessageCallback> = (err: BusinessError, data: sms.IDeliveryShortMessageCallback) => { console.log(`deliveryCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); } let slotId: number = 0; let content: string = 'çŸä¿¡å†…容'; let destinationHost: string = '+861xxxxxxxxxx'; let serviceCenter: string = '+861xxxxxxxxxx'; let destinationPort: number = 1000; let options: sms.SendMessageOptions = {slotId, content, destinationHost, serviceCenter, destinationPort, sendCallback, deliveryCallback}; sms.sendShortMessage(options, (err: BusinessError) => { console.log(`callback: err->${JSON.stringify(err)}`); }); ``` <!--DelEnd--> ## 开呿¥éª¤ å‘é€çŸä¿¡çš„æŽ¥å£éœ€è¦ç³»ç»Ÿæƒé™æ‰å¯è°ƒç”¨ï¼Œä¸‰æ–¹åº”用如果有å‘é€çŸä¿¡éœ€æ±‚,需è¦åœ¨åº”用内实现跳转到çŸä¿¡ç¼–è¾‘çš„åŠŸèƒ½ï¼Œå¹¶ä¸”éœ€è¦æºå¸¦ç¼–辑内容和收件人å·ç ,å¯ä»¥é€šè¿‡è°ƒç”¨å…ƒèƒ½åŠ›startAbilityæŽ¥å£æŒ‡å®šå·ç 并跳转到å‘é€çŸä¿¡é¡µé¢çš„æ–¹å¼å®žçŽ°ã€‚ ```ts // 示例代ç import { common, Want } from '@kit.AbilityKit'; const MMS_BUNDLE_NAME = "com.ohos.mms"; const MMS_ABILITY_NAME = "com.ohos.mms.MainAbility"; const MMS_ENTITIES = "entity.system.home"; export class Contact { contactsName: string; telephone: number; constructor(contactsName: string, telephone: number) { this.contactsName = contactsName; this.telephone = telephone; } } @Entry @Component struct JumpMessage { private context = getContext(this) as common.UIAbilityContext; startMMSAbilityExplicit() { // 这里完善è”系人和å·ç ;姓åä¸»è¦æ˜¯é€šè¿‡æ‰‹æœºå·æ¥æŸ¥è¯¢å®žé™…è”系人åç§°ï¼Œå› æ¤è¿™ç§æ–¹å¼è¿˜æ˜¯ä»¥æ‰‹æœºå·ç 为主。 let params: Array<Object> = [new Contact("å¼ ä¸‰", 13344556677)]; let want: Want = { bundleName: "com.ohos.mms", abilityName: "com.ohos.mms.MainAbility", parameters: { contactObjects: JSON.stringify(params), pageFlag: "conversation", // 这里填写çŸä¿¡å†…容。 content: "我是çŸä¿¡å…·ä½“内容" } }; this.context.startAbilityForResult(want).then((data) => { console.log("Success" + JSON.stringify(data)); }).catch(() => { console.log("error"); }); } build() { Row() { Column() { Button('å‘é€çŸä¿¡') .onClick(() => { this.startMMSAbilityExplicit(); }) } .width('100%') } .height('100%') } } ``` ## 相关实例 针对çŸä¿¡çš„使用,有以下相关实例å¯ä¾›å‚考: - [çŸä¿¡æœåŠ¡ï¼ˆArkTS)(Full SDK)(API9)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/SystemFeature/Telephony/Message)