使用Xamarin和Visual Studio開發(fā)Android可穿戴設(shè)備應(yīng)用
譯文搭建開發(fā)環(huán)境
我們需要做的第一件事情是安裝必要的工具。因此,你需要首先安裝Visual Studio。如果您使用的是Visual Studio 2010,2012或2013,那么請(qǐng)確保它是一個(gè)專業(yè)版本或更高級(jí)版本,因?yàn)閂isual Studio的Xamarin擴(kuò)展并不支持精簡(jiǎn)版。有關(guān)詳細(xì)信息,請(qǐng)參閱 https://xamarin.com/faq。
對(duì)我本人來說,使用了Visual Studio 2013 Untimate版本。一旦你已經(jīng)安裝了受支持的 Visual Studio版本,那么請(qǐng)接著下載Visual Studio的Xamarin擴(kuò)展(下載地址是http://xamarin.com/visual-studio)。(你可以免費(fèi)試用或申請(qǐng)一個(gè)許可證版本)。
接下來的操作,只需按照下載的向?qū)е械恼f明進(jìn)行即可,直到安裝完全為止。為了正常使用擴(kuò)展,您可能需要重新啟動(dòng)您的計(jì)算機(jī)。
現(xiàn)在,當(dāng)您正常啟動(dòng)Visual Studio,你應(yīng)該能夠在工具菜單下看到如圖所示的以下項(xiàng)目。
圖1:Android Tools和SDK
為確保您所需要的一切已經(jīng)正常安裝,您可以通過Android SDK Manager來驗(yàn)證。為此,只需打開Tools > Android > Android SDK Manager。這將打開下圖所示的窗口:
圖2:Android SDK Manager
現(xiàn)在,在確保你已經(jīng)安裝所需要的一切后,接下來你可以開始使用Visual Studio中的Xamarin創(chuàng)建你自己的Android應(yīng)用程序了。
創(chuàng)建簡(jiǎn)單的Android可穿戴設(shè)備應(yīng)用
首先,讓我們創(chuàng)建一個(gè)新的Visual Studio項(xiàng)目,然后從模板中選擇Android > Wear App (Android)。你應(yīng)該能夠看到如下圖所示的東西。
圖3:Visual Studio模板列表
現(xiàn)在,只需單擊OK命令讓Visual Studio為你生成創(chuàng)建可穿戴應(yīng)用程序所需的文件。下面的圖像顯示了默認(rèn)生成的文件。注意:其中提供了你著手構(gòu)建可穿戴應(yīng)用程序的示例代碼。
圖4:默認(rèn)的可穿戴應(yīng)用程序代碼
很容易吧!官方文檔中提供的有關(guān)Xamarin.Android應(yīng)用程序分析的資料對(duì)應(yīng)的URL是http://developer.xamarin.com/guides/android/getting_started/。
運(yùn)行程序
為了在不需要真實(shí)設(shè)備的情況下即可運(yùn)行應(yīng)用程序,我們首先需要建立一個(gè)模擬器程序。您可以通過以下幾個(gè)步驟創(chuàng)建模擬器程序。
轉(zhuǎn)到命令Tools > Andriod > Andriod Emulator Manager或單擊工具欄上的AVD圖標(biāo)。請(qǐng)參閱下圖。
圖5:Andriod內(nèi)置模擬器程序
之后,應(yīng)顯示安卓系統(tǒng)設(shè)備管理器窗口。在這里,我們可以編輯、啟動(dòng)、 創(chuàng)建、刪除或修復(fù)虛擬設(shè)備。
現(xiàn)在,我們需要單擊"Create"按鈕。下圖中的窗口應(yīng)打開,允許您選擇您想要?jiǎng)?chuàng)建的設(shè)備。在本例中,我們只需要?jiǎng)?chuàng)建一個(gè)虛擬Android可穿戴設(shè)備,用于在模擬器上運(yùn)行我們的應(yīng)用程序。
圖6:AVD對(duì)話框
一旦一切設(shè)置好,只需單擊OK便可創(chuàng)建虛擬設(shè)備。在下圖中,你應(yīng)該能夠看到您剛通過AVD管理器創(chuàng)建的設(shè)備。
圖7:AVD管理器
現(xiàn)在,只需單擊命令Start > Launch便可在后臺(tái)運(yùn)行模擬程序。注意,系統(tǒng)可能需要一些時(shí)間來加載模擬器。模擬程序加載并準(zhǔn)備好之后,你應(yīng)該能夠看到您剛創(chuàng)建的虛擬設(shè)備的名稱顯示于開始調(diào)試下拉列表中。
圖8:新創(chuàng)建的虛擬設(shè)備
現(xiàn)在,將您的應(yīng)用程序設(shè)置為啟動(dòng)項(xiàng)目,然后按F5鍵運(yùn)行它。下圖展示了示例可穿戴應(yīng)用程序在模擬器程序中的輸出結(jié)果。
圖9:輸出
請(qǐng)記住,集成到Visual Studio內(nèi)部的默認(rèn)模擬器速度有點(diǎn)慢,僅適用于測(cè)試小型應(yīng)用程序。在實(shí)際開發(fā)中創(chuàng)建并測(cè)試應(yīng)用程序的話,我會(huì)推薦你使用Xamarin安卓播放機(jī)(https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/debug-on-emulator/)來模擬android應(yīng)用程序。
就這樣!如果您想要參考更多的可穿戴設(shè)備應(yīng)用程序?qū)嵗?,只需訪問此鏈接:http://developer.xamarin.com/samples/android/Android%20Wear/。
同步Android可穿戴設(shè)備和手持設(shè)備間的數(shù)據(jù)
讓我們?cè)倥σ稽c(diǎn),創(chuàng)建一個(gè)支持在您的可穿戴程序和手持設(shè)備之間進(jìn)行通信的可工作的應(yīng)用程序。這個(gè)練習(xí)將演示如何同步你的安卓應(yīng)用程序之間的數(shù)據(jù)。
創(chuàng)建Android可穿戴設(shè)備程序
開始,讓我們啟動(dòng)Visual Studio 2013,然后選擇命令"File" -> "New" -> "Project..."。在模板中選擇 C# > Android并選擇Wear App (Android) Project。
命名您的應(yīng)用程序,然后單擊OK讓Visual Studio為您生成所需的文件。在本練習(xí)中,程序名為"WearDemo"。下面的圖像顯示了默認(rèn)示例代碼生成的文件,用于幫助您編寫可穿戴設(shè)備應(yīng)用程序。
圖 10:可穿戴設(shè)備應(yīng)用程序項(xiàng)目
在我們開始修改默認(rèn)代碼之前,我想指出:有兩種方法可以實(shí)現(xiàn)可穿戴設(shè)備和手持設(shè)備之間進(jìn)行通信,分別是DataApi和MessageApi。以下是每個(gè)API的簡(jiǎn)短描述。
DataApi:它所輸出的API供組件讀取或?qū)懭霐?shù)據(jù)項(xiàng)(Items)及相關(guān)資源(Assets)。其中,DataItem提供數(shù)據(jù)存儲(chǔ),支持掌上電腦和手持設(shè)備之間自動(dòng)同步。Assets用于發(fā)送例如圖像這樣的Blob數(shù)據(jù)。你只需要將Assets關(guān)聯(lián)到DataItems,則系統(tǒng)會(huì)自動(dòng)為你實(shí)現(xiàn)其他的處理。有關(guān)細(xì)節(jié),請(qǐng)閱讀這個(gè)URL(https://developers.google.com/android/reference/com/google/android/gms/wearable/DataApi)。
MessageApi:它提供的API供組件將消息發(fā)送到其他節(jié)點(diǎn)。消息通常應(yīng)該包含小型有效數(shù)據(jù)。你應(yīng)使用Assets與 DataApi來存儲(chǔ)大數(shù)據(jù)。有關(guān)細(xì)節(jié),請(qǐng)閱讀這個(gè)URL(https://developers.google.com/android/reference/com/google/android/gms/wearable/MessageApi)。
在下面提供的這個(gè)特別的演示例程中,我要使用DataApi來發(fā)送/同步設(shè)備之間的數(shù)據(jù)。由于DataApi是Google Play Services的一部分,那么我們需要做的第一件事是添加以下命名空間引用:
- using Android.Gms.Common.Apis;
- using Android.Gms.Wearable;
Android.Gms.Common.Apis允許我們使用GoogleApiClient,這是集成Google Play Services的主入口點(diǎn)。Android.Gms.Wearable使我們能夠使用WearableClass類。下一步是要擴(kuò)展我們的MainActivity類,即需要繼承以下接口:
1. IDataApiDataListener
2. IGoogleApiClientConnectionCallbacks
3. IGoogleApiClientOnConnectionFailedListener
IDataApiDataListener用來接收數(shù)據(jù)事件。IGoogleApiClientConnectionCallbacks接口提供的回調(diào)函數(shù)在客戶端連接或斷開服務(wù)時(shí)調(diào)用。IGoogleApiClientOnConnectionFailedListener接口提供的回調(diào)函數(shù)在客戶端連接到服務(wù)失敗時(shí)調(diào)用。
概括一下,將數(shù)據(jù)發(fā)送到手持設(shè)備的示例代碼歸納如下:
- using System;
- using Android.Runtime;
- using Android.Widget;
- using Android.OS;
- using Android.Support.Wearable.Views;
- using Java.Interop;
- using Android.Gms.Common.Apis;
- using Android.Gms.Wearable;
- using System.Linq;
- namespace WearDemo
- {
- [Activity(Label = "WearDemo", MainLauncher = true, Icon = "@drawable/icon")]
- public class MainActivity : Activity,IDataApiDataListener, IGoogleApiClientConnectionCallbacks, IGoogleApiClientOnConnectionFailedListener
- {
- private IGoogleApiClient _client;
- const string _syncPath = "/WearDemo/Data";
- protected override void OnCreate(Bundle bundle) {
- base.OnCreate(bundle);
- _client = new GoogleApiClientBuilder(this, this, this)
- .AddApi(WearableClass.Api)
- .Build();
- // Set our view from the "main" layout resource
- SetContentView(Resource.Layout.Main);
- var v = FindViewById<WatchViewStub>(Resource.Id.watch_view_stub);
- v.LayoutInflated += delegate {
- // Get our button from the layout resource,
- // and attach an event to it
- Button button = FindViewById<Button>(Resource.Id.myButton);
- button.Click += delegate {
- SendData();
- };
- };
- }
- public void SendData() {
- try {
- var request = PutDataMapRequest.Create(_syncPath);
- var map = request.DataMap;
- map.PutString("Message", "Vinz says Hello from Wearable!");
- map.PutLong("UpdatedAt", DateTime.UtcNow.Ticks);
- WearableClass.DataApi.PutDataItem(_client, request.AsPutDataRequest());
- }
- finally {
- _client.Disconnect();
- }
- }
- protected override void OnStart() {
- base.OnStart();
- _client.Connect();
- }
- public void OnConnected(Bundle p0) {
- WearableClass.DataApi.AddListener(_client, this);
- }
- public void OnConnectionSuspended(int reason) {
- Android.Util.Log.Error("GMSonnection suspended " + reason);
- WearableClass.DataApi.RemoveListener(_client, this);
- }
- public void OnConnectionFailed(Android.Gms.Common.ConnectionResult result) {
- Android.Util.Log.Error("GMSonnection failed " + result.ErrorCode);
- }
- protected override void OnStop() {
- base.OnStop();
- _client.Disconnect();
- }
- public void OnDataChanged(DataEventBuffer dataEvents) {
- var dataEvent = Enumerable.Range(0, dataEvents.Count)
- .Select(i => dataEvents.Get(i).JavaCast<IDataEvent)
- .FirstOrDefault(x => x.Type == DataEvent.TypeChanged && x.DataItem.Uri.Path.Equals(_syncPath));
- if (dataEvent == null)
- return;
- //do stuffs here
- }
- }
- }
現(xiàn)在來解釋一下上面代碼中發(fā)生的事情。在OnCreate事件中,我們構(gòu)建了一個(gè)Google Play Services客戶端,它包括可穿戴設(shè)備API。然后,我們?cè)诎粹o的click事件處理程序中調(diào)用SendData()方法實(shí)現(xiàn)數(shù)據(jù)發(fā)送。其中,SendData()方法包含發(fā)送數(shù)據(jù)的實(shí)際邏輯。具體實(shí)現(xiàn)中,我們通過傳遞數(shù)據(jù)對(duì)象路徑(即WearDemo/Data)創(chuàng)建了一個(gè)DataMapRequest請(qǐng)求。實(shí)際的數(shù)據(jù)是DataMap,其中包含了一個(gè)Message值和一個(gè)UpdatedAt值。接收方可以使用路徑來確定本文中稍后要介紹的數(shù)據(jù)來源。
事件
1.OnStart:當(dāng)活動(dòng)啟動(dòng)時(shí)觸發(fā)此事件,用于連接到數(shù)據(jù)層。
2.OnConnected:當(dāng)數(shù)據(jù)層的連接成功時(shí)觸發(fā)此事件。
3.OnStop:斷開數(shù)據(jù)層連接時(shí)觸發(fā)此事件,此時(shí)活動(dòng)停止 。你可以使用OnConnectionSuspended和OnConnectionFailed來實(shí)現(xiàn)對(duì)應(yīng)的連接回調(diào)(例如在本演示中我們記錄錯(cuò)誤及分離服務(wù))。
4.OnDataChanged:當(dāng)數(shù)據(jù)更改時(shí)觸發(fā)此事件。
需要牢記的事情
1.路徑應(yīng)該總是以正斜線(/)字符開頭。
2.時(shí)間戳是發(fā)送數(shù)據(jù)時(shí)必須使用的,因?yàn)镺nDataChanged()事件僅在數(shù)據(jù)真正更改時(shí)觸發(fā)。將時(shí)間戳添加到數(shù)據(jù)將確保調(diào)用了該方法。
在文件AndroidManifest.xml的<application>元素下添加下列元數(shù)據(jù):
- <meta-data android:name="com.google.android.gms.version"
- android:value="@integer/google_play_services_version" />
創(chuàng)建主程序項(xiàng)目
為了測(cè)試同步和數(shù)據(jù)發(fā)送,我們需要?jiǎng)?chuàng)建一個(gè)主安卓應(yīng)用程序,由它來負(fù)責(zé)接收來自可穿戴設(shè)備的數(shù)據(jù)對(duì)象。其中,這個(gè)主程序?qū)惭b在手持設(shè)備(例如手機(jī)或平板電腦)中。
現(xiàn)在,右鍵單擊解決方案項(xiàng)目,選擇命令“Add->New Project”。在“Add->New Project”窗口中選擇“Visual C# > Android > Blank App (Android)”。你應(yīng)該能夠看到如下圖這個(gè)樣子:
圖 11: Android主程序項(xiàng)目
為簡(jiǎn)單起見,我命名項(xiàng)目為MainAppDemo。此后,只需單擊OK命令讓系統(tǒng)為您生成所需的文件。最終,你在解決方案界面中將看到如圖所示結(jié)果。
圖 12: 解決方案資源管理器
在我們開始將邏輯添加到主應(yīng)用程序之前,我想突出強(qiáng)調(diào)以下兩點(diǎn):
第一點(diǎn):你的可穿戴設(shè)備應(yīng)用程序和主應(yīng)用程序的命名空間應(yīng)該是相同的。在此示例中,可穿戴應(yīng)用程序使用的命名空間是"WearDemo"。所以,一定要重命名您的主程序的命名空間為"WearDemo",從而使之匹配。若要更改默認(rèn)的命名空間,您可以參考下列這些步驟:
(1)轉(zhuǎn)到命令“Project->Properties->Default Namespace”。
(2)若要更改其他項(xiàng),你可以使用CTRL + H快捷鍵把默認(rèn)命名空間替換為WearDemo。
(3)您也可以使用重構(gòu)代碼技術(shù)來更改命名空間。這只需要用鼠標(biāo)右鍵單擊命名空間并選擇“Refactor->Rename”命令即可。
第二點(diǎn):你的可穿戴設(shè)備程序和主應(yīng)用程序的包名也應(yīng)該相同。你可以找到該軟件包的名稱,這只需要右鍵單擊該項(xiàng)目并選擇選擇“Properties->Android Manifest”命令,如下面的圖像所示:
圖 13: Android配置文件
請(qǐng)確保這兩個(gè)軟件包名稱均被設(shè)置為"WearDemo.WearDemo"。一定要確保兩個(gè)項(xiàng)目生成成功。一旦你做完這一步,你就可以繼續(xù)往下操作——開始修改項(xiàng)目了。首先,要將"Compile using Android version"更改為"API Level 21 (Xamarin.Android v5.0 Support) "API。請(qǐng)參考下面的圖片:
圖 14 ︰應(yīng)用程序設(shè)置
在引用位置,檢查你是否引用了Xamarin.Android.Support.V4。如果沒有這樣做,你也可以右鍵單擊References,然后選擇Manage NUGET Packages。然后,在“Online> Nuget.Org”下搜索"Xamarin.Android.Support.V4"。你應(yīng)該能夠看到這樣的內(nèi)容:
圖 15: NuGet程序包管理器
只需單擊安裝并等待,直到任務(wù)完成。現(xiàn)在,你需要做同樣的操作并安裝"Xamarin.Android.Wear-1.0.0"。
添加服務(wù)WearableListenerService
擴(kuò)展WearableListenerService服務(wù)能夠讓你偵聽數(shù)據(jù)層中的任何更新。由系統(tǒng)來管理服務(wù)的生命周期:當(dāng)需要發(fā)送數(shù)據(jù)項(xiàng)或消息時(shí)實(shí)現(xiàn)綁定到服務(wù);而當(dāng)沒有工作做時(shí)實(shí)現(xiàn)解除到服務(wù)的綁定。更多細(xì)節(jié),請(qǐng)參考這個(gè)URL(https://developers.google.com/android/reference/com/google/android/gms/wearable/WearableListenerService)。
此后,我們將使用WearableListenerService來監(jiān)聽從數(shù)據(jù)層發(fā)來的更新事件并處理數(shù)據(jù)。那么,下一步是添加擴(kuò)展WearableListenerService的類。為此,右鍵單擊項(xiàng)目根目錄并選擇“Add->Class”,然后命名為"WearService"。下面給出此類完整的邏輯實(shí)現(xiàn)代碼。
- using System.Linq;
- using Android.App;
- using Android.Content;
- using Android.Runtime;
- using Android.Gms.Wearable;
- using Android.Gms.Common.Apis;
- using Android.Support.V4.Content;
- namespace WearDemo
- {
- [Service]
- [IntentFilter(new[] { "com.google.android.gms.wearable.BIND_LISTENER" })]
- public class WearService : WearableListenerService
- {
- const string _syncPath = "/WearDemo/Data";
- IGoogleApiClient _client;
- public override void OnCreate() {
- base.OnCreate();
- _client = new GoogleApiClientBuilder(this.ApplicationContext)
- .AddApi(WearableClass.Api)
- .Build();
- _client.Connect();
- Android.Util.Log.Info("WearIntegrationreated");
- }
- public override void OnDataChanged(DataEventBuffer dataEvents) {
- var dataEvent = Enumerable.Range(0, dataEvents.Count)
- .Select(i => dataEvents.Get(i).JavaCast<IDataEvent)
- .FirstOrDefault(x => x.Type == DataEvent.TypeChanged && x.DataItem.Uri.Path.Equals(_syncPath));
- if (dataEvent == null)
- return;
- //get data from wearable
- var dataMapItem = DataMapItem.FromDataItem(dataEvent.DataItem);
- var map = dataMapItem.DataMap;
- string message = dataMapItem.DataMap.GetString("Message");
- Intent intent = new Intent();
- intent.SetAction(Intent.ActionSend);
- intent.PutExtra("WearMessage", message);
- LocalBroadcastManager.GetInstance(this).SendBroadcast(intent);
- }
- }
- }
上面的代碼實(shí)現(xiàn)了OnDataChanged事件,此事件負(fù)責(zé)過濾從"TypeChanged"事件發(fā)來的數(shù)據(jù)事件。具體地講,它會(huì)檢查"/ WearDemo /Data"這個(gè)數(shù)據(jù)對(duì)象路徑,然后在本地進(jìn)行廣播。
創(chuàng)建主Activity
下面給出的是主Activity的代碼部分:
- using Android.App;
- using Android.Content;
- using Android.Widget;
- using Android.OS;
- using Android.Support.V4.Content;
- namespace WearDemo
- {
- [Activity(Label = "MainAppDemo", MainLauncher = true, Icon = "@drawable/icon")]
- public class MainActivity : Activity
- {
- TextView _txtMsg;
- protected override void OnCreate(Bundle bundle) {
- base.OnCreate(bundle);
- // Set our view from the "main" layout resource
- SetContentView(Resource.Layout.Main);
- // Get our TextBox from the layout resource,
- _txtMsg = FindViewById<TextView>(Resource.Id.txtMessage);
- IntentFilter filter = new IntentFilter(Intent.ActionSend);
- MessageReciever receiver = new MessageReciever(this);
- LocalBroadcastManager.GetInstance(this).RegisterReceiver(receiver, filter);
- }
- public void ProcessMessage(Intent intent) {
- _txtMsg.Text = intent.GetStringExtra("WearMessage");
- }
- internal class MessageReciever : BroadcastReceiver
- {
- MainActivity _main;
- public MessageReciever(MainActivity owner) { this._main = owner; }
- public override void OnReceive(Context context, Intent intent) {
- _main.ProcessMessage(intent);
- }
- }
- }
- }
在上面的代碼中,我們進(jìn)行了注冊(cè),以便在OnCreate()事件中接收來自于ListenerService的廣播消息,然后定義了一個(gè)繼承自BroadcastReceiver類的嵌套類,實(shí)現(xiàn)了OnReceive()方法并提取有關(guān)數(shù)據(jù)。最后,Process()方法負(fù)責(zé)處理顯示數(shù)據(jù)到UI的問題。
布局
打開文件Main.xaml,并使用如下內(nèi)容替換原來內(nèi)容:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:id="@+id/txtMessage"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="50dp"
- android:gravity="center"
- android:textColor="@android:color/white"
- android:textSize="80sp" />
- </LinearLayout>
上面的標(biāo)記中沒有什么特別的內(nèi)容。歸納來看,主要是包含了一個(gè)用于顯示消息的文本框。
添加Google Play服務(wù)所需要的元數(shù)據(jù)
最后,我們?cè)谂渲梦募嗀ndroidManifest.xml下的 <application>元素中添加元數(shù)據(jù),代碼如下:
- <meta-data android:name="com.google.android.gms.version"
- android:value="@integer/google_play_services_version" />
接下來,我要介紹如何把每一個(gè)應(yīng)用程序部署到每一臺(tái)設(shè)備并進(jìn)行結(jié)果測(cè)試。
測(cè)試、調(diào)試與部署程序
在本節(jié)中,我們將學(xué)習(xí)如何在實(shí)際設(shè)備中部署和測(cè)試應(yīng)用程序。首先需要說明的是,我使用Nexus 9和LG G Watch作為我的測(cè)試設(shè)備。
在我們開始之前,請(qǐng)確保在您的機(jī)器上為安卓系統(tǒng)安裝了USB驅(qū)動(dòng)程序。您可以通過右鍵單擊命令“Computer > Manage > Device Manager > Other Devices”進(jìn)行驗(yàn)證。如果驅(qū)動(dòng)程序不在列表中,那么你必須先下載驅(qū)動(dòng)程序(參考這個(gè)地址:http://developer.android.com/sdk/win-usb.htmland)并進(jìn)行安裝(安裝方法請(qǐng)參閱鏈接: http://developer.android.com/tools/extras/oem-usb.html#InstallingDriver)。
接下來一個(gè)重要的事情是,在您的手持設(shè)備中啟用USB調(diào)試。您可以使用命令“Settings > Developer Options > Usb Debugging”啟用此功能。一旦你安裝了必需的驅(qū)動(dòng)程序并啟用了您的設(shè)備的調(diào)試支持,那么你只需將您的手持設(shè)備插入您的PC或筆記本電腦即可。在Visual Studio中,你應(yīng)該能夠看到所連接的手持設(shè)備顯示如下圖所示:
圖16: 接通手持設(shè)備后的項(xiàng)目界面
把主程序部署到手持設(shè)備
以下是部署主應(yīng)用程序的主要步驟:
(1)右鍵單擊主應(yīng)用程序項(xiàng)目并選擇“Properties > Android Options”選項(xiàng)。然后,在Packaging選項(xiàng)卡下取消選中" Use Fast Deployment (debug mode only)"。
(2)卸載項(xiàng)目。
(3)編輯.csproj文件并在其中添加PropertyGroup部分:
- <PropertyGroup>
- <JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
- </PropertyGroup>
(4)保存文件,然后加載該項(xiàng)目。
(5)右鍵單擊主應(yīng)用程序項(xiàng)目并將其設(shè)置為啟動(dòng)項(xiàng)目。
(6)構(gòu)建應(yīng)用程序。
(7)單擊運(yùn)行或播放按鈕。系統(tǒng)將開始打包并將應(yīng)用程序安裝到設(shè)備上。只需稍等一會(huì)兒就會(huì)完成。
部署可穿戴設(shè)備應(yīng)用程序
您可以按照如上面同樣的過程來部署可穿戴應(yīng)用程序。不過,如果你想要通過藍(lán)牙來部署和調(diào)試您的應(yīng)用程序的話,還需要如下一些額外的步驟:
1) 在您的手持設(shè)備中打開Android Wear關(guān)聯(lián)程序。
2) 從右上角的菜單中選擇Settings。
3) 啟用"Debugging Over Bluetooth"。你應(yīng)該能夠看到像下面這樣的輸出狀態(tài):
Host: disconnected
Target: connected
4) 把掌上電腦通過USB連接到您的PC或筆記本電腦。
5) 在Visual Studio中,轉(zhuǎn)到“Tools > Android > Android Adb Command Prompt”處,運(yùn)行以下命令:
adb forward tcp:4444 localabstract:/adb-hub
adb connect localhost:4444
6) 然后,你應(yīng)該能夠看到可穿戴設(shè)備顯示在設(shè)備列表中,如下面的圖像所示:
圖17:顯示連接成功的設(shè)備
7) 重復(fù)與上面步驟1- 5相同的步驟,把主程序部署到手持設(shè)備。
8) 現(xiàn)在,設(shè)置你的可穿戴設(shè)備應(yīng)用程序?yàn)閱?dòng)項(xiàng)目,構(gòu)建應(yīng)用程序并運(yùn)行起來。
一旦安裝結(jié)束,你應(yīng)該能夠在Visual Studio 設(shè)置斷點(diǎn)開始調(diào)試和測(cè)試您的應(yīng)用程序。下面是示例應(yīng)用程序的輸出結(jié)果:
圖18:最終的輸出結(jié)果
最后,你可以從Github下載本文示范項(xiàng)目源碼,供您學(xué)習(xí)參考。
小結(jié)
在這篇文章中,你已經(jīng)學(xué)習(xí)了下列內(nèi)容:
1.大概了解了可穿戴設(shè)備和安卓系統(tǒng)
2.設(shè)置開發(fā)環(huán)境
3.創(chuàng)建一個(gè)簡(jiǎn)單的Android可穿戴設(shè)備應(yīng)用程序
4.創(chuàng)建了一個(gè)應(yīng)用程序,它能夠保持可穿戴設(shè)備和Android手持設(shè)備之間的數(shù)據(jù)同步
5.測(cè)試、調(diào)試和部署橫跨可穿戴設(shè)備和手持設(shè)備的Android應(yīng)用程序。