![鴻蒙應用程序開發(fā) 課件 第9章 Data Ability_第1頁](http://file4.renrendoc.com/view10/M00/38/0D/wKhkGWW7njWAfDZ-AAChuAG-hdo923.jpg)
![鴻蒙應用程序開發(fā) 課件 第9章 Data Ability_第2頁](http://file4.renrendoc.com/view10/M00/38/0D/wKhkGWW7njWAfDZ-AAChuAG-hdo9232.jpg)
![鴻蒙應用程序開發(fā) 課件 第9章 Data Ability_第3頁](http://file4.renrendoc.com/view10/M00/38/0D/wKhkGWW7njWAfDZ-AAChuAG-hdo9233.jpg)
![鴻蒙應用程序開發(fā) 課件 第9章 Data Ability_第4頁](http://file4.renrendoc.com/view10/M00/38/0D/wKhkGWW7njWAfDZ-AAChuAG-hdo9234.jpg)
![鴻蒙應用程序開發(fā) 課件 第9章 Data Ability_第5頁](http://file4.renrendoc.com/view10/M00/38/0D/wKhkGWW7njWAfDZ-AAChuAG-hdo9235.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第9章DataAbility引言本章學習目標理解HarmonyOS數(shù)據(jù)應用(DataAbility)的基本概念熟悉創(chuàng)建DataAbility的步驟,理解DataAbility中各方法的含義2了解使用DataAbility訪問本地文件熟練對本地數(shù)據(jù)庫進行增刪改查第9章DataAbility9.1DataAbility概述9.2Data的創(chuàng)建9.3Data的訪問39.1DataAbility概述4數(shù)據(jù)的存儲方式多種多樣,可以是傳統(tǒng)意義上的數(shù)據(jù)庫系統(tǒng),也可以是本地磁盤上的文件。Data對外提供對數(shù)據(jù)的增、刪、改、查,以及打開文件等接口,這些接口的具體實現(xiàn)由開發(fā)者提供。Data的提供方和使用方都通過URI(UniformResourceIdentifier,統(tǒng)一資源定位符)來標識一個具體的數(shù)據(jù),例如數(shù)據(jù)庫中的某個表或磁盤上的某個文件。HarmonyOS的URI仍基于URI通用標準格式如圖所示。dataability:///com.example.addressbookdemo.UserDataAbility/usersdataability://device_id/com.example.addressbookdemo.UserDataAbility/usersURI示例代碼如下:第9章DataAbility9.1DataAbility概述9.2Data的創(chuàng)建9.3Data的訪問59.2Data的創(chuàng)建6創(chuàng)建Data時,首先需要確定數(shù)據(jù)的存儲方式,在Data中不同的數(shù)據(jù)存儲方式給出了不同的操作方法。Data支持以下兩種數(shù)據(jù)形式分別是:文件型數(shù)據(jù)、結構化型數(shù)據(jù)(數(shù)據(jù)庫)。創(chuàng)建一個名為DataAbilityOnFile的應用來演示創(chuàng)建Data、介紹文件型數(shù)據(jù)的操作方法。9.2Data的創(chuàng)建7publicclassDataAbilityextendsAbility{privatestaticfinalHiLogLabelLABEL_LOG=newHiLogLabel(3,0xD001100,"Demo");@OverridepublicvoidonStart(Intentintent){super.onStart(intent);HiL(LABEL_LOG,"DataAbilityonStart");}@OverridepublicResultSetquery(Uriuri,String[]columns,DataAbilityPredicatespredicates){returnnull;}新創(chuàng)建的Data內(nèi)容如下:9.2Data的創(chuàng)建8
@Overridepublicintinsert(Uriuri,ValuesBucketvalue){HiL(LABEL_LOG,"DataAbilityinsert");return999;}@Overridepublicintdelete(Uriuri,DataAbilityPredicatespredicates){return0;}@Overridepublicintupdate(Uriuri,ValuesBucketvalue,DataAbilityPredicatespredicates){return0;}9.2Data的創(chuàng)建9
@OverridepublicFileDescriptoropenFile(Uriuri,Stringmode){returnnull;}
@OverridepublicString[]getFileTypes(Uriuri,StringmimeTypeFilter){returnnewString[0];}
@OverridepublicPacMapcall(Stringmethod,Stringarg,PacMapextras){returnnull;}
@OverridepublicStringgetType(Uriuri){returnnull;}}第9章DataAbility9.1DataAbility概述9.2Data的創(chuàng)建9.3Data的訪問109.3Data的訪問11可以通過DataAbilityHelper類來訪問當前應用或其他應用提供的共享數(shù)據(jù)。DataAbilityHelper作為客戶端,與提供方的Data進行通信。Data接收到請求后,執(zhí)行相應的處理,并返回結果DataAbilityHelper提供了一系列與Data對應的方法。1.聲明使用權限:如果待訪問的Data聲明了訪問需要的權限,則訪問此Data需要在配置文件中聲明需要此權限示例代碼如下:"reqPermissions":[{"name":"com.example.dataabilityonfile.DataAbilityOnFile.DATA"},//訪問文件還需要添加訪問存儲讀寫權限{"name":"ohos.permission.READ_USER_STORAGE"},{"name":"ohos.permission.WRITE_USER_STORAGE"}9.3Data的訪問122.創(chuàng)建DataAbilityHelperDataAbilityHelper為開發(fā)者提供了creator()方法來創(chuàng)建DataAbilityHelper實例。該方法為靜態(tài)方法,有多個重載。常見的方法是通過傳入一個context對象來創(chuàng)建DataAbilityHelper對象。示例代碼如下:DataAbilityHelperdataAbilityHelper=DataAbilityHelper.creator(this);3.訪問DataDataAbilityHelper為開發(fā)者提供了一系列的接口來訪問不同類型的數(shù)據(jù),比如文件、數(shù)據(jù)庫等。訪問數(shù)據(jù)庫:DataAbilityHelper為開發(fā)者提供了增、刪、改、查以及批量處理等方法來操作數(shù)據(jù)庫。如下表所示。方法名中文描述ResultSetquery(Uriuri,String[]columns,DataAbilityPredicatespredicates)查詢數(shù)據(jù)庫intinsert(Uriuri,ValuesBucketvalue)向數(shù)據(jù)庫中插入單條數(shù)據(jù)intinsert(Uriuri,ValuesBucketvalue)刪除一條或多條數(shù)據(jù)intupdate(Uriuri,ValuesBucketvalue,DataAbilityPredicatespredicates)更新數(shù)據(jù)庫9.3Data的訪問13這些方法的使用說明如下:query()查詢方法,其中uri為目標資源路徑,columns為想要查詢的字段(也是查詢后想要返回的結果)。開發(fā)者的查詢條件可以通過DataAbilityPredicates類來構建。示例代碼如下:DataAbilityHelperdataAbilityHelper=DataAbilityHelper.creator(this);//訪問Data時用的URIUriuri=Uri.parse(“dataability:///com.example.addressbookdemo.UserDataAbility/Users”);//指定查詢返回的數(shù)據(jù)列String[]columns=newString[]{“ID”,“NAME”,“TEL”};//設置查詢條件DataAbilityPredicatesdataAbilityPredicatesicates=newDataAbilityPredicates();//查詢數(shù)據(jù)庫,得到結果集ResultSetresultSet=dataAbilityHelper.query(uri,columns,dataAbilityPredicatesicates);//處理結果resultSet.goToFirstRow();do{ //在此處理結果集中的記錄}while(resultSet.goToNextRow());9.3Data的訪問14HarmonyOS還提供了putInteger(StringcolumnName,Integervalue)、putDouble(StringcolumnName,Doublevalue)等方法,適應不同的數(shù)據(jù)類型。示例代碼如下:DataAbilityHelperdataAbilityHelper=DataAbilityHelper.creator(this);//把數(shù)據(jù)封裝到valuesBucket中ValuesBucketvaluesBucket=newValuesBucket();valuesBucket.putString("NAME","ZHANGSAN");valuesBucket.putInteger("TEL";//插入一條數(shù)據(jù)dataAbilityHelper.insert(uri,valuesBucket);delete()刪除方法,其中刪除條件可以通過DataAbilityPredicates來構建。示例代碼如下:DataAbilityHelperdataAbilityHelper=DataAbilityHelper.creator(this);//設置刪除條件DataAbilityPredicatesdataAbilityPredicates=newDataAbilityPredicates();//根據(jù)ID刪除數(shù)據(jù)dataAbilityPredicates.equalTo(“ID”,2);//刪除ID為2的數(shù)據(jù)dataAbilityHelper.delete(uri,dataAbilityPredicates);9.3Data的訪問15update()更新方法,更新數(shù)據(jù)由ValuesBucket傳入,更新條件由DataAbilityPredicates來構建。示例代碼如下:DataAbilityHelperdataAbilityHelper=DataAbilityHelper.creator(this);//設置更新條件DataAbilityPredicatesdataAbilityPredicates=newDataAbilityPredicates();//根據(jù)ID更新數(shù)據(jù)dataAbilityPredicates.equalTo(“ID”,2);//把數(shù)據(jù)封裝到valuesBucket中ValuesBucketvaluesBucket=newValuesBucket();valuesBucket.putString("NAME","ZHANGSAN");valuesBucket.putInteger("TEL";//更新ID為2的數(shù)據(jù)dataAbilityHelper.update(uri,valuesBucket,dataAbilityPredicates);9.3.1案例:訪問文件16下面介紹使用DataAbilityHelper訪問文件的具體步驟。創(chuàng)建一個名為DataAbilityOnFile的Data,修改內(nèi)容如下:publicclassDataAbilityOnFileextendsAbility{//定義日志標簽
privatestaticfinalHiLogLabelLABEL_LOG=newHiLogLabel(HiLog.LOG_APP,0x00922,"DataAbilityOnFile");@OverridepublicvoidonStart(Intentintent){super.onStart(intent);}@OverridepublicFileDescriptoropenFile(Uriuri,Stringmode){HiL(LABEL_LOG,"openFile()方法被調(diào)用");//獲取文件名
StringfileName=uri.getDecodedPathList().get(1);//文件路徑
StringPath=getDataDir()+File.separator+fileName;9.3.1案例:訪問文件17 //創(chuàng)建文件對象
FileFile=newFile(Path);try{//如果文件不存在,那么創(chuàng)建該文本文件,并且設置文本內(nèi)容
if(!File.exists()){createFile(Path);}//獲取文件描述符對象并返回
FileInputStreamfileIs=newFileInputStream(File);FileDescriptorfileDescriptor=fileIs.getFD();//綁定文件描述符
returnMessageParcel.dupFileDescriptor(fileDescriptor);}catch(IOExceptione){e.printStackTrace();}returnnull; } //創(chuàng)建文本文件,并且設置文本內(nèi)容
privatestaticvoidcreateFile(Stringpath)throwsIOException{ HiL(LABEL_LOG,"createFile()方法被調(diào)用"); //獲得BufferedWriter對象
BufferedWriterbw=newBufferedWriter(newFileWriter(path));9.3.1案例:訪問文件18 //寫字符串
bw.write("測試數(shù)據(jù)");//關閉BufferedWriterbw.close();}@OverridepublicString[]getFileTypes(Uriuri,StringmimeTypeFilter){returnnewString[0];}@OverridepublicPacMapcall(Stringmethod,Stringarg,PacMapextras){returnnull;}@OverridepublicStringgetType(Uriuri){returnnull;}}9.3.1案例:訪問文件19在config.json文件中設置文件讀、寫權限,其內(nèi)容如下:"reqPermissions":[ { "name":"com.example.dataabilityonfile.DataAbilityOnFile.DATA" }, { "name":"ohos.permission.READ_USER_STORAGE" }, { "name":"ohos.permission.WRITE_USER_STORAGE" }]修改MainAbilitySlice,其內(nèi)容如下:publicclassMainAbilitySliceextendsAbilitySlice{//定義日志標簽
privatestaticfinalHiLogLabelLABEL_LOG=newHiLogLabel(HiLog.LOG_APP,0x00922,"MainAbilitySlice");9.3.1案例:訪問文件20 @Override publicvoidonStart(Intentintent){ super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); //找到組件
ButtonBtn_Visit=(Button)findComponentById(ResourceTable.Id_Btn_Visit); TextText_Result=(Text)findComponentById(ResourceTable.Id_Text_Result); //給Btn_Vist添加單擊事件
Btn_Visit.setClickedListener(component->{ Uriuri=Uri.parse("dataability://"+ "/com.example.dataabilityonfile.DataAbilityOnFile"+ "/test.txt"); //創(chuàng)建DataAbilityHelper輔助類對象
DataAbilityHelperdataAbilityHelper=DataAbilityHelper.creator(this);9.3.1案例:訪問文件21try{FileDescriptorfileDescriptor=dataAbilityHelper.openFile(uri,"r");//獲得BufferedReader對象
BufferedReaderbufferedReader=newBufferedReader(newFileReader(fileDescriptor));//獲取文本內(nèi)容
StringBuildercontent=newStringBuilder();Stringline;while((line=bufferedReader.readLine())!=null){ content.append(line);}bufferedReader.close();//關閉BufferedReader對象
//沙盒目錄
HiL(LABEL_LOG,"getDataDir:%{public}s.",getDataDir().toString());//沙盒文件目錄
HiL(LABEL_LOG,"getFilesDir:%{public}s.",getFilesDir().toString());9.3.1案例:訪問文件22打開遠程模擬器,運行程序,單擊應用初始頁面中“訪問本地文件”按鈕,運行結果如下圖所示9.3.1案例:訪問文件23控制臺輸出內(nèi)容如下: 06-0214:52:00.03318240-18240/com.example.dataabilityonfileI00922/DataAbilityOnFile:openFile()方法被調(diào)用 06-0214:52:00.03418240-18240/com.example.dataabilityonfileI00922/DataAbilityOnFile:createFile()方法被調(diào)用 06-0214:52:00.03818240-18240/com.example.dataabilityonfileI00922/MainAbilitySlice:getDataDir:/data/user/0/com.example.dataabilityonfile. 06-0214:52:00.03818240-18240/com.example.dataabilityonfileI00922/MainAbilitySlice:getFilesDir:/data/user/0/com.example.dataabilityonfile/files.9.3.2案例:訪問本地數(shù)據(jù)庫24本節(jié)所使用的數(shù)據(jù)庫類型為關系型數(shù)據(jù)庫,是最為常見的數(shù)據(jù)庫類型之一,用于存儲結構化型數(shù)據(jù)HarmonyOS提供的關系型數(shù)據(jù)庫功能更加完善,查詢效率更加高效。關系型數(shù)據(jù)庫基于關系模型來管理數(shù)據(jù)的數(shù)據(jù)庫,以行和列的形式存儲數(shù)據(jù)。謂詞是數(shù)據(jù)庫中用來代表數(shù)據(jù)實體的性質(zhì)、特征或者數(shù)據(jù)實體之間關系的詞項,主要用來定義數(shù)據(jù)庫的操作條件。結果集指用戶查詢之后的結果集合,可以對數(shù)據(jù)進行訪問。結果集提供了靈活的數(shù)據(jù)訪問方式,可以更方便的拿到用戶想要的數(shù)據(jù)。SQLite數(shù)據(jù)庫是一款輕型的數(shù)據(jù)庫,是遵守ACID的關系型數(shù)據(jù)庫管理系統(tǒng)。它是一個開源的項目。如果不指定數(shù)據(jù)庫的日志模式,那么系統(tǒng)默認日志方式是WAL(WriteAheadLog)模式。如果不指定數(shù)據(jù)庫的落盤模式,那么系統(tǒng)默認落盤方式是FULL模式。HarmonyOS數(shù)據(jù)庫使用的共享內(nèi)存默認大小是2MB。數(shù)據(jù)庫中連接池的最大數(shù)量是4個,用以管理用戶的讀寫操作。為保證數(shù)據(jù)的準確性,數(shù)據(jù)庫同一時間只能支持一個寫操作。9.3.2案例:訪問本地數(shù)據(jù)庫25DatabaseHelper:是數(shù)據(jù)庫操作的輔助類,當數(shù)據(jù)庫創(chuàng)建成功后,數(shù)據(jù)庫文件將存儲在由上下文指定的目錄里。數(shù)據(jù)庫文件存儲的路徑會因指定不同的上下文存在差異。數(shù)據(jù)庫的創(chuàng)建和刪除都需要用到DatabaseHelper類。因為DatabaseHelper并不是單例,所以在使用時需要實例化。示例代碼如下:DatabaseHelperdatabaseHelper=newDatabaseHelper(this);StoreConfig類可以對數(shù)據(jù)庫進行配置,包括設置數(shù)據(jù)庫名、存儲模式、日志模式、同步模式,是否為只讀,及數(shù)據(jù)庫加密。這里只介紹設置數(shù)據(jù)庫名,其他全部取默認模式,示例代碼如下://創(chuàng)建數(shù)據(jù)庫配置對象,設置數(shù)據(jù)庫名StoreConfigconfig=StoreConfig.newDefaultConfig(“User.db”);9.3.2案例:訪問本地數(shù)據(jù)庫26RdbOpenCallback類在數(shù)據(jù)庫創(chuàng)建時被回調(diào),開發(fā)者可以在該方法中初始化表結構,并添加一些應用使用到的初始化數(shù)據(jù)。示例代碼如下://數(shù)據(jù)庫創(chuàng)建時被回調(diào)privatefinalRdbOpenCallbackrdbOpenCallback=newRdbOpenCallback(){
@OverridepublicvoidonCreate(RdbStorerdbStore){//創(chuàng)建表,如果表不存在rdbStore.executeSql("CREATETABLEIFNOTEXISTS"+表名+"("+ID+"INTEGERPRIMARYKEYAUTOINCREMENT,"+姓名+"TEXTNOWBULL,"+電話+"TEXT)");}
//數(shù)據(jù)庫升級時被回調(diào)@OverridepublicvoidonUpgrade(RdbStorerdbStore,inti,inti1){//在升級數(shù)據(jù)庫時使用該方法}};9.3.2案例:訪問本地數(shù)據(jù)庫27下面介紹使用DataAbilityHelper訪問數(shù)據(jù)庫的具體步驟首先設計頁面UI,其需要有文本輸入組件、按鈕組件、文本組件。創(chuàng)建一個名為Const的類,用于存放在訪問數(shù)據(jù)庫過程中的各種常量。其內(nèi)容如下:publicclassConst{//URI協(xié)議publicstaticfinalStringSCHEME="dataability://";//URI授權publicstaticfinalStringAUTH="/com.example.addressbookdemo.UserDataAbility";//數(shù)據(jù)庫名publicstaticfinalStringDB_NAME="User.db";//表名publicstaticfinalStringDB_TAB_NAME="Users";//列名姓名publicstaticfinalStringDB_COLUMN_NAME="NAME";//列名電話publicstaticfinalStringDB_COLUMN_TEL="TEL";//列名IDpublicstaticfinalStringDATA_PATH="/Users";}9.3.2案例:訪問本地數(shù)據(jù)庫28創(chuàng)建一個名為UserDataAbility的Data,修改其內(nèi)容如下:publicclassUserDataAbilityextendsAbility{//定義日志標簽
privatestaticfinalHiLogLabelLABEL_LOG=newHiLogLabel(HiLog.LOG_APP,0x00922,"UserDataAbility");//創(chuàng)建關系型數(shù)據(jù)庫操作對象
privateRdbStorerdbStore;//創(chuàng)建數(shù)據(jù)庫操作的輔助類對象
privateDatabaseHelperdatabaseHelper;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);HiL(LABEL_LOG,"onStart()方法被調(diào)用");//初始化數(shù)據(jù)庫
initDB();}9.3.2案例:訪問本地數(shù)據(jù)庫29//初始化數(shù)據(jù)庫
privatevoidinitDB(){HiL(LABEL_LOG,"initDB()方法被調(diào)用");databaseHelper=newDatabaseHelper(this);//創(chuàng)建數(shù)據(jù)庫配置對象,設置數(shù)據(jù)庫名
StoreConfigconfig=StoreConfig.newDefaultConfig(Const.DB_NAME);//根據(jù)配置創(chuàng)建數(shù)據(jù)庫
rdbStore=databaseHelper.getRdbStore(config,1,rdbOpenCallback,null);}//數(shù)據(jù)庫創(chuàng)建時被回調(diào)
privatefinalRdbOpenCallbackrdbOpenCallback=newRdbOpenCallback(){9.3.2案例:訪問本地數(shù)據(jù)庫30@OverridepublicvoidonCreate(RdbStorerdbStore){//創(chuàng)建表,如果表不存在
rdbStore.executeSql("CREATETABLEIFNOTEXISTS"+Const.DB_TAB_NAME+"("+Const.DB_COLUMN_ID+"INTEGERPRIMARYKEYAUTOINCREMENT,"+Const.DB_COLUMN_NAME+"TEXTNOWBULL,"+Const.DB_COLUMN_TEL+"TEXT)");}9.3.2案例:訪問本地數(shù)據(jù)庫31@OverridepublicResultSetquery(Uriuri,String[]columns,DataAbilityPredicatespredicates){HiL(LABEL_LOG,"query()方法被調(diào)用");//從uri中獲得表名
StringtableName=uri.getLastPath();//判斷表名是否是usersif("Users".equals(tableName)){//根據(jù)參數(shù)創(chuàng)建查詢條件
RdbPredicatesrdbPredicates=DataAbilityUtils.createRdbPredicates(predicates,tableName);HiL(LABEL_LOG,"查詢成功!");//查詢,返回結果集
returnrdbStore.query(rdbPredicates,columns);}HiL(LABEL_LOG,"查詢失敗!");returnnull;}9.3.2案例:訪問本地數(shù)據(jù)庫32@Overridepublicintinsert(Uriuri,ValuesBucketvalue){HiL(LABEL_LOG,"insert()方法被調(diào)用");//從uri中獲得表名
StringtableName=uri.getLastPath();intindex=0;//判斷表名是否是usersif("Users".equals(tableName)){//插入數(shù)據(jù)庫,成功后返回行IDindex=(int)rdbStore.insert(tableName,value);HiL(LABEL_LOG,"插入數(shù)據(jù)成功!數(shù)據(jù)所在行ID:%{public}d.",index);returnindex;}HiL(LABEL_LOG,"插入數(shù)據(jù)失敗!");//失敗返回-1returnindex;}9.3.2案例:訪問本地數(shù)據(jù)庫33@Overridepublicintdelete(Uriuri,DataAbilityPredicatespredicates){HiL(LABEL_LOG,"delete()方法被調(diào)用");//從uri中獲得表名
StringtableName=uri.getLastPath();//根據(jù)參數(shù),構建刪除條件
RdbPredicatesrdbPredicates=DataAbilityUtils.createRdbPredicates(predicates,tableName);HiL(LABEL_LOG,"刪除數(shù)據(jù)成功!");//刪除指定數(shù)據(jù),并返回
returnrdbStore.delete(rdbPredicates);}9.3.2案例:訪問本地數(shù)據(jù)庫34@Overridepublicintupdate(Uriuri,ValuesBucketvalue,DataAbilityPredicatespredicates){HiL(LABEL_LOG,"update()方法被調(diào)用");//從uri中獲得表名
StringtableName=uri.getLastPath();//根據(jù)參數(shù),構建更新條件
RdbPredicatesrdbPredicates=DataAbilityUtils.createRdbPredicates(predicates,tableName);HiL(LABEL_LOG,"更新數(shù)據(jù)成功!");//更新數(shù)據(jù),并返回
returnrdbStore.update(value,rdbPredicates);}}9.3.1案例:訪問文件35打開遠程模擬器,運行程序,輸入聯(lián)系人信息,運行結果如圖所示9.3.1案例:訪問文件36新建兩個聯(lián)系人,再單擊查詢聯(lián)系人按鈕;修改聯(lián)系人信息,修改后單擊更新聯(lián)系人按鈕,這里輸入ID為2,則修改第二個聯(lián)系人的信息,再單擊查詢聯(lián)系人按鈕;將ID為2的聯(lián)系人信息修改為姓名:“李四”,電話:。單擊刪除聯(lián)系人按鈕,再單擊查詢聯(lián)系人按鈕,刪除第二個聯(lián)系人,結果分別如下圖所示。9.3.3案例:訪問遠程數(shù)據(jù)庫37訪問遠程數(shù)據(jù)庫與訪問本地數(shù)據(jù)庫的流程是一致的,區(qū)別在于需要在URI中加入所訪問的設備ID。下面創(chuàng)建一個名為AddressBook_VistRemote的應用來演示,推薦CompileSDK版本選擇6。"reqPermissions":[{"name":"ohos.permission.DISTRIBUTED_DATASYNC"}]訪問本地數(shù)據(jù)庫時設備ID為空,但是在訪問遠程Data時需要設備ID,以及允許不同設備間可以進行數(shù)據(jù)交換權限,在config.json文件中請求權限如下:9.3.3案例:訪問遠程數(shù)據(jù)庫38publicclassMainAbilityextendsAbility{privatestaticfinalintMY_PERMISSIONS_REQUEST_DISTRIBUTED_DATASYNC=1;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setMainRoute(MainAbilitySlice.class.getName());if(verifySelfPermission("ohos.permission.DISTRIBUTED_DATASYNC")!=IBundleManager.PERMISSION_GRANTED){//應用未被授予權限
if(canRequestPermission("ohos.permission.DISTRIBUTED_DATASYNC")){//是否可以申請彈框授權(首次申請或者用戶未選擇禁止且不再提示)requestPermissionsFromUser(newString[]{"ohos.permission.DISTRIBUTED_DATASYNC"},因為允許不同設備間的數(shù)據(jù)交換權限是敏感權限,需要用戶確定,所以需要進行動態(tài)申請,在MainAbility中申請代碼如下:9.3.3案例:訪問遠程數(shù)據(jù)庫39 MY_PERMISSIONS_REQUEST_DISTRIBUTED_DATASYNC);}else{//顯示應用需要權限的理由,提示用戶進入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦山生態(tài)修復合同(2篇)
- 智慧城市資源共享合同(2篇)
- 2025年安徽工業(yè)職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年天津電子信息職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年南通師范高等??茖W校高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 2025至2031年中國面食調(diào)料行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國塑料鋁銀底漆行業(yè)投資前景及策略咨詢研究報告
- 城市智能支持系統(tǒng)優(yōu)化-深度研究
- 二零二五年度父母向子女贈與個人股權財產(chǎn)合同書(2025版)
- 2025年度股權代持與公司戰(zhàn)略規(guī)劃及投資退出合同
- 電力溝施工組織設計-電纜溝
- 《法律援助》課件
- SLT824-2024 水利工程建設項目文件收集與歸檔規(guī)范
- 鍋爐本體安裝單位工程驗收表格
- 一種基于STM32的智能門鎖系統(tǒng)的設計-畢業(yè)論文
- 妊娠合并強直性脊柱炎的護理查房
- 2024年山東鐵投集團招聘筆試參考題庫含答案解析
- 兒童10歲生日-百日宴-滿月酒生日會成長相冊展示(共二篇)
- 《繪本閱讀與指導》課程教學大綱
- 員工離職登記表(范本模板)
- 2023人教版(PEP)小學英語(三、四、五、六年級)詞匯及常用表達法(課本同步)
評論
0/150
提交評論