# FA模型访问Stage模型DataShareExtensionAbility ## 概述 æ— è®ºFA模型还是Stage模型,数æ®è¯»å†™åŠŸèƒ½éƒ½åŒ…å«å®¢æˆ·ç«¯å’ŒæœåŠ¡ç«¯ä¸¤éƒ¨åˆ†ã€‚ - FA模型ä¸ï¼Œå®¢æˆ·ç«¯æ˜¯ç”±DataAbilityHelperæ供对外接å£ï¼ŒæœåŠ¡ç«¯æ˜¯ç”±DataAbilityæ供数æ®åº“的读写æœåŠ¡ã€‚ - Stage模型ä¸ï¼Œå®¢æˆ·ç«¯æ˜¯ç”±DataShareHelperæ供对外接å£ï¼ŒæœåŠ¡ç«¯æ˜¯ç”±DataShareExtensionAbilityæ供数æ®åº“的读写æœåŠ¡ã€‚ æœåŠ¡ç«¯ç”±FA模型å‡çº§åˆ°Stage模型åŽï¼Œä¼šå¯¼è‡´FA模型的客户端在API 9(å«)之åŽçš„ç‰ˆæœ¬ä¸Šæ— æ³•è®¿é—®æœåŠ¡ç«¯ã€‚ 为了解决上述问题,系统在框架侧æ供了一个解决方案,让开å‘者平滑过渡到API 9(å«)之åŽçš„版本。 ## åŸºæœ¬åŽŸç† ä¸€ç§å…¼å®¹æ–¹æ³•æ˜¯DataAbilityHelperæ ¹æ®ä¼ 入的URIçš„å‰ç¼€æ˜¯DataAbility还是DataShareæ¥å†³å®šæ˜¯å¦è°ƒDataShareHelper的接å£ã€‚但是这ç§æ–¹æ³•éœ€è¦å¼€å‘者修改原客户端代ç çš„URI,åšä¸åˆ°æ— 感知切æ¢ã€‚ å› æ¤DataAbilityHelperä¸èƒ½ä»…ä¾èµ–URIçš„å‰ç¼€å†³å®šè®¿é—®DataAbility还是DataShareExtensionAbility,系统采用的方法是: 1. å…ˆæŒ‰ç…§ä¼ å…¥çš„URI拉起DataAbility;如果拉起失败,å†å°†ä¼ 入的URIçš„å‰ç¼€è½¬æ¢æˆDataShareå†åŽ»å°è¯•æ‹‰èµ·DataShareExtensionAbility。 2. 如果URIæ— å¯¹åº”çš„DataAbilityå’ŒDataShareExtensionAbility,则拉起失败;å之,必定会拉起DataAbility或者DataShareExtensionAbility。 ## 约æŸä¸Žé™åˆ¶ 1. ç”±DataAbility切æ¢åˆ°DataShareExtensionAbility时,åªèƒ½ä¿®æ”¹URIçš„å‰ç¼€ï¼Œä¸èƒ½ä¿®æ”¹URI的其他部分。 2. DataShareHelper并没有实现原DataAbilityHelper对外API接å£çš„æ‰€æœ‰åŠŸèƒ½ï¼Œå› æ¤æœ‰éƒ¨åˆ†æŽ¥å£æ˜¯æ— 法兼容的,具体如表1所示。 **表1** FA模型访问stage模型DataShareExtensionAbility接å£æ”¯æŒæƒ…况 | æŽ¥å£ | DataAbilityHelper是å¦æä¾› | DataShareHelper是å¦æä¾› | 是å¦å…¼å®¹ | | -------- | -------- | -------- | -------- | | on | 是 | 是 | 是 | | off | 是 | 是 | 是 | | notifyChange | 是 | 是 | 是 | | insert | 是 | 是 | 是 | | delete | 是 | 是 | 是 | | query | 是 | 是 | 是 | | update | 是 | 是 | 是 | | batchInsert | 是 | 是 | 是 | | getType | 是 | å¦ | å¦ | | getFileTypes | 是 | å¦ | å¦ | | normalizeUri | 是 | 是 | 是 | | denormalizeUri | 是 | 是 | 是 | | openFile | 是 | å¦ | å¦ | | call | 是 | å¦ | å¦ | | executeBatch | 是 | å¦ | å¦ |