自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

2020征文-手機(jī)【干貨】鴻蒙應(yīng)用程序流轉(zhuǎn)的實(shí)現(xiàn)!

系統(tǒng)
這里我給大家介紹一下HarmonyOS應(yīng)用程序流轉(zhuǎn)的實(shí)現(xiàn)。

[[358967]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

大家好!!歡迎您來到51CTO鴻蒙專區(qū)。我是董昱。很榮幸成為HarmonyOS系統(tǒng)課程開發(fā)者。


這里我給大家介紹一下HarmonyOS應(yīng)用程序流轉(zhuǎn)的實(shí)現(xiàn)。

本文中的內(nèi)容有視頻版哦。在我在51CTO中首發(fā)了我的最新免費(fèi)的視頻教程《精講鴻蒙應(yīng)用程序開發(fā)》就有相關(guān)的內(nèi)容。

歡迎大家觀看,并提出寶貴的意見:https://edu.51cto.com/course/26138.html

下面進(jìn)入正題:

1 什么是應(yīng)用程序的協(xié)同和流轉(zhuǎn)?

首先,什么是應(yīng)用程序的流轉(zhuǎn)和協(xié)同呢?

應(yīng)用流轉(zhuǎn)和協(xié)同是鴻蒙操作系統(tǒng)分布式的重要體現(xiàn)。這里面涉及兩個(gè)概念:

  • 協(xié)同:在多個(gè)設(shè)備上同時(shí)運(yùn)行同一個(gè)應(yīng)用程序。用戶在多個(gè)設(shè)備的支持下進(jìn)行同一工作任務(wù)。
  • 流轉(zhuǎn):一個(gè)應(yīng)用程序在某一個(gè)設(shè)備上運(yùn)行時(shí),因用戶需要切換到到另外一個(gè)上繼續(xù)運(yùn)行,同時(shí)在原來的設(shè)備上停止運(yùn)行。流轉(zhuǎn)包括遷移(Migrate)和遷回兩個(gè)層面。

如果文字上讀起來困難的話,可以看看下面的例子:

如果我正在用設(shè)備A寫郵件,但是設(shè)備A快沒電了,我就可以將這個(gè)界面從設(shè)備A流轉(zhuǎn)到設(shè)備B上,此時(shí)界面中我已經(jīng)輸入的郵件信息都沒有丟失和變化。這個(gè)過程稱為流轉(zhuǎn):

流轉(zhuǎn)包括了遷移和遷回兩個(gè)層面。

這個(gè)特性有點(diǎn)類似于蘋果的應(yīng)用接力,已經(jīng)不是非常新鮮的事情了。但是鴻蒙的分布式特性還是存在兩點(diǎn)特別的優(yōu)勢(shì):

(1)蘋果的應(yīng)用接力開發(fā)非常繁瑣。鴻蒙的流轉(zhuǎn)卻非常簡單,易學(xué)。

(2)蘋果設(shè)備的接力難以實(shí)現(xiàn)協(xié)同功能。

那么什么是協(xié)同呢?

例如,我用手機(jī)看新聞列表,用智慧屏瀏覽新聞。而手機(jī)上和智慧屏上都運(yùn)行著同樣一個(gè)應(yīng)用程序,如下圖所示。

這里要注意是同一個(gè)應(yīng)用程序。這個(gè)協(xié)同過程借助于分布式軟總線等關(guān)鍵技術(shù)是如絲般順滑的,而且開發(fā)上非常簡單。

在這里,先給大家演示以下流轉(zhuǎn)的基本開發(fā)方法。

2 應(yīng)用程序流轉(zhuǎn)的實(shí)現(xiàn)

這主要包含了三個(gè)主要步驟:

(1)權(quán)限配置(包括動(dòng)態(tài)權(quán)限和靜態(tài)權(quán)限)

(2)在Ability和AbilitySlice中實(shí)現(xiàn)IAbilityContinuation接口。

(3)調(diào)用ContinueAbility()方法實(shí)現(xiàn)流轉(zhuǎn)

具體的實(shí)現(xiàn)方法如下:

首先,我們創(chuàng)建一個(gè)空的手機(jī)Java工程。模板為:Empty Feature Ability (Java)。

讓我們修改以下UI界面,僅顯示一個(gè)【流轉(zhuǎn)】按鈕。如圖

布局代碼如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:orientation="vertical"
  7.  
  8.     <Button 
  9.         ohos:id="$+id:btn_continue" 
  10.         ohos:height="match_parent" 
  11.         ohos:width="match_parent" 
  12.         ohos:layout_alignment="horizontal_center" 
  13.         ohos:text="遷移" 
  14.         ohos:text_size="50" 
  15.     /> 
  16.  
  17. </DirectionalLayout> 

然后在config.json中配置靜態(tài)權(quán)限。

代碼如下:

  1.   ...... 
  2.   "module": { 
  3.     ...... 
  4.     "reqPermissions": [ 
  5.       { 
  6.         "name""ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" 
  7.       }, 
  8.       { 
  9.         "name""ohos.permission.DISTRIBUTED_DATASYNC" 
  10.       } 
  11.     ], 
  12.     ..... 

 在MainAbility.java中添加以下代碼:

  1. public class MainAbility extends Ability implements IAbilityContinuation { 
  2.     @Override 
  3.     public void onStart(Intent intent) { 
  4.         super.onStart(intent); 
  5.         super.setMainRoute(MainAbilitySlice.class.getName()); 
  6.         requestPermission(); 
  7.     } 
  8.  
  9.     private void requestPermission() { 
  10.         String[] permission = { 
  11.                 "ohos.permission.DISTRIBUTED_DATASYNC"
  12.                 "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"}; 
  13.         List<String> applyPermissions = new ArrayList<>(); 
  14.         for (String element : permission) { 
  15.             if (verifySelfPermission(element) != 0) { 
  16.                 if (canRequestPermission(element)) { 
  17.                     applyPermissions.add(element); 
  18.                 } else { 
  19.                 } 
  20.             } else { 
  21.             } 
  22.         } 
  23.         requestPermissionsFromUser(applyPermissions.toArray(new String[0]), 0); 
  24.     } 
  25.  
  26.     @Override 
  27.     public boolean onStartContinuation() { 
  28.         return true
  29.     } 
  30.  
  31.     @Override 
  32.     public boolean onSaveData(IntentParams intentParams) { 
  33.         return true
  34.     } 
  35.  
  36.     @Override 
  37.     public boolean onRestoreData(IntentParams intentParams) { 
  38.         return true
  39.     } 
  40.  
  41.     @Override 
  42.     public void onCompleteContinuation(int i) { 
  43.  
  44.     } 

 這段代碼中包括兩個(gè)部分:

(1)通過requestPermission()方法動(dòng)態(tài)申請(qǐng)權(quán)限。

(2)實(shí)現(xiàn)IAbilityContinuation接口,并重寫其四個(gè)主要的方法。方法內(nèi)容可以為空,因?yàn)槌休d界面的為AbilitySlice。

在MainAbilitySlice.java中添加以下代碼:

  1. public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuation {    @Override 
  2.     public void onStart(Intent intent) { 
  3.         super.onStart(intent); 
  4.         super.setUIContent(ResourceTable.Layout_ability_main); 
  5.  
  6.         Button btnContinue = (Button) findComponentById(ResourceTable.Id_btn_continue); 
  7.         btnContinue.setClickedListener(new Component.ClickedListener() { 
  8.             @Override 
  9.             public void onClick(Component component) { 
  10.                 continueAbility(getAvailableDeviceIds().get(0)); 
  11.             } 
  12.         }); 
  13.     } 
  14.  
  15.     @Override 
  16.     public void onActive() { 
  17.         super.onActive(); 
  18.     } 
  19.  
  20.     @Override 
  21.     public void onForeground(Intent intent) { 
  22.         super.onForeground(intent); 
  23.     } 
  24.  
  25.     @Override 
  26.     public boolean onStartContinuation() { 
  27.         return true
  28.     } 
  29.  
  30.     @Override 
  31.     public boolean onSaveData(IntentParams intentParams) { 
  32.         return true
  33.     } 
  34.  
  35.     @Override 
  36.     public boolean onRestoreData(IntentParams intentParams) { 
  37.         return true
  38.     } 
  39.  
  40.     @Override 
  41.     public void onCompleteContinuation(int i) { 
  42.         terminateAbility(); 
  43.     } 
  44.  
  45.     /** 
  46.      * 獲得所有已經(jīng)連接的所有設(shè)備ID 
  47.      * @return 設(shè)備ID列表 
  48.      */ 
  49.     public static List<String> getAvailableDeviceIds() { 
  50.         // 獲得DeviceInfo列表,包含了已經(jīng)連接的所有設(shè)備信息 
  51.         List<DeviceInfo> deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE); 
  52.         // 如果DeviceInfo列表為空則返回 
  53.         if (deviceInfoList == null || deviceInfoList.size() == 0) { 
  54.             return null
  55.         } 
  56.         // 遍歷DeviceInfo列表,獲得所有的設(shè)備ID 
  57.         List<String> deviceIds = new ArrayList<>(); 
  58.         for (DeviceInfo deviceInfo : deviceInfoList) { 
  59.             deviceIds.add(deviceInfo.getDeviceId()); 
  60.         } 
  61.         // 返回所有的設(shè)備ID 
  62.         return deviceIds; 
  63.     } 
  64.  

 這個(gè)代碼中包括以下幾個(gè)方面:

(1)通過getAvailableDeviceIds()獲取周圍可以流轉(zhuǎn)應(yīng)用程序的設(shè)備ID列表。

(2)通過continueAbility()方法進(jìn)行設(shè)備流轉(zhuǎn)

(3)在onSaveData()和onRestoreData()方法中可以將界面中的數(shù)據(jù)流轉(zhuǎn)出去。數(shù)據(jù)的流轉(zhuǎn)大家可以觀看我的視頻教程哦,里面有詳細(xì)的敘述:https://edu.51cto.com/course/26138.html?hm(在第5章的第1講)

(4)在onCompleteContinuation()方法中調(diào)用termiateAbility()方法結(jié)束原先設(shè)備上的應(yīng)用程序。

最后,在兩個(gè)搭載鴻蒙操作系統(tǒng)的手機(jī)上均安裝這個(gè)程序,并在其中一個(gè)設(shè)備上打開的該應(yīng)用程序:單擊【Continue】按鈕就可以實(shí)現(xiàn)應(yīng)用程序在兩個(gè)設(shè)備間的流轉(zhuǎn)了。

具體的演示大家可以觀看的視頻教程哦(在第5章的第1講)!免費(fèi)噠!

https://edu.51cto.com/course/26138.html?hm


不過,這兩個(gè)設(shè)備需要在同一個(gè)WiFi下,并且登錄同一個(gè)華為賬號(hào),才可以使用分布式軟總線實(shí)現(xiàn)流轉(zhuǎn)。

©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2020-12-28 10:15:18

鴻蒙HarmonyOSListContain

2020-12-22 11:09:20

鴻蒙Feature AbiAbilitySlic

2010-03-04 16:21:15

Android Mar

2020-12-14 11:44:29

開發(fā)js智能手表wearablewea

2011-09-05 10:27:02

Sencha Touc手機(jī)應(yīng)用Android

2020-12-23 11:24:34

鴻蒙開發(fā)IDE安裝

2019-11-08 10:00:09

Windows手機(jī)應(yīng)用程序

2020-12-09 11:53:24

鴻蒙開發(fā)HelloWord

2018-10-25 15:13:23

APP脫殼工具

2020-12-22 11:20:36

鴻蒙HarmonyOS游戲

2011-11-30 21:56:31

ibmdwXPathPHP

2010-12-27 17:04:07

應(yīng)用程序版本升級(jí)

2011-08-05 13:49:53

iPhone 應(yīng)用 開發(fā)

2011-07-21 15:56:32

iPhone 截屏

2012-03-07 14:54:02

Unifyphonegapsass

2010-03-11 15:23:35

Pythonfor s

2010-03-01 16:04:13

Linux Hadoo

2021-04-08 09:41:33

手機(jī)應(yīng)用APP隱私

2020-11-05 11:47:52

HarmonyOS

2010-08-13 13:18:20

Flex應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)