LiveCard

已新增至 API 等級 XE12
公開課程

LiveCard

此類別可讓您建立使用中的卡片,並在時間軸上發布。

如要進一步瞭解如何建立即時資訊卡,請參閱即時資訊卡開發人員指南。

即時卡片的生命週期

即時資訊卡需要長時間的背景資訊,才能在卡片發布期間持續擁有,因此您必須在背景 Service 管理。您可以在服務啟動後,或於服務監控的其他事件時發布即時資訊卡。同樣地,如果卡片已無關聯,或服務已毀損,就應該取消發布。

當您發布即時資訊卡時,可以選擇對使用者造成的影響。訊息發布時,系統會在時間軸中插入資訊卡,而且不會產生任何明顯的影響:使用者必須滑動資訊卡才能看到該資訊卡。您也可以在即時資訊卡發布後自動顯示。如果應用程式的主要使用者介面是即時卡片,而非活動,通常非常有用。

使用即時資訊卡顯示內容

即時資訊卡可顯示版面配置資源的內容,或允許程式碼直接轉譯到其繪圖途徑上。請依據應用程式需要更新資訊卡內容的頻率,以及主要呈現小工具或任意形式圖形,選擇最適合應用程式的方法。

使用遠端檢視畫面加載版面配置

如果您的應用程式只需要標準小工具且不常更新 (重新整理需時幾秒鐘或更長),請在 RemoteViews 類別的協助下建立卡片。RemoteViews 物件可讓 Glass 時間軸 (與您自己的應用程式程式碼分開執行的程序) 加載您建立的版面配置。

     LiveCard liveCard; // initialized elsewhere
     RemoteViews views = new RemoteViews(context.getPackageName(),
             R.layout.my_layout);
     liveCard.setViews(views);
 

請注意,當使用 RemoteViews 的資訊卡發布後,呼叫 set* 方法後對檢視畫面進行的變更將不會反映在時間軸上,除非您再次明確呼叫即時資訊卡上的 setViews,以強制更新。

直接在即時資訊卡表面進行繪圖

如果您的應用程式需要更頻繁的更新 (每秒數次) 或顯示比圖像小工具更精細的圖形,請啟用直接轉譯,並將 SurfaceHolder.Callback 新增至卡片表面。

     LiveCard liveCard; // initialized elsewhere
     liveCard.setDirectRenderingEnabled(true);
     liveCard.getSurfaceHolder().addCallback(callback);
 

接著,您就可以在背景執行緒或表面外部事件 (例如感應器或位置更新) 的介面上直接繪製。在顯示或隱藏資訊卡時,使用 surfaceCreatedsurfaceDestroyed 方法啟動及停止算繪邏輯。

請注意,主 UI 執行緒不會叫用表面持有人的回呼方法。

處理即時卡片選擇

即時資訊卡必須提供動作 (用於啟動活動、服務或執行廣播的 PendingIntent),系統會在使用者輕觸選取資訊卡時執行該動作。您通常會使用這項動作啟動活動,藉此顯示選項選單,或將使用者導向至應用程式的其他部分。您至少應該提供一個選項,讓使用者從時間軸中移除即時卡片。

     LiveCard liveCard; // initialized elsewhere
     Intent intent = new Intent(context, MyActivity.class);
     liveCard.setAction(PendingIntent.getActivity(context, 0, intent, 0));
 

系統不會顯示沒有動作的即時資訊卡。

巢狀類別
列舉 LiveCard.PublishMode 決定資訊卡在發布後向使用者顯示的方式。
常數
字串 EXTRA_FROM_LIVECARD_VOICE 布林值,表示透過即時卡片的語音啟動了 Intent
公用建構函式
LiveCard (背景資訊結構定義、String 標記)
公用方法
LiveCard
attach(Service 服務)
SurfaceHolder
布林值
void
void
LiveCard
LiveCard
setDirectrenderEnabled (布林值啟用)
LiveCard
setRenderer (GlRenderer 轉譯器)
LiveCard
LiveCard
setVoiceActionEnabled (布林值啟用)
void
繼承方法

常數

已新增至 API 等級 XE21

公開 靜態 字串 EXTRA_FROM_LIVECARD_VOICE

布林值,表示透過即時卡片的語音啟動了 Intent

常數值: "android.intent.extra.EXTRA_FROM_LIVECARD"

公用建構函式

已新增至 API 等級 XE16

public LiveCard(結構定義結構定義、String 標記)

使用指定標記建立即時資訊卡。

請注意,資訊卡在明確發布之前才會顯示。

參數
內容 應用程式的背景資訊
標記 卡片的非空值標記;這是用來偵錯的

公用方法

已新增至 API 等級 XE16

public LiveCard附加(Service 服務)

附加背景 Service,這樣卡片發布時,服務就會於前景執行。

取消發布這個即時資訊卡後,服務會自動從前景移除。

參數
服務 將設為在
傳回
  • 這個物件用於呼叫鏈結
已新增至 API 等級 XE12

公開 SurfaceHolder getSurfaceHolder ()

啟用直接轉譯時,請授予用於繪製繪圖的 Surface

請注意,傳回的 SurfaceHolder 應僅做為存取代管途徑的方式使用。變更表面形狀和類型的方法均不需要操作。

另請注意,此物件不會透過 UI 執行緒進行回呼。

已新增至 API 等級 XE12

公開 布林值 isPublish ()

如果卡片目前發布,則傳回 true

已新增至 API 等級 XE16

公開 void 瀏覽 ()

將使用者傳送至時間軸中的這張資訊卡。

擲回
IllegalStateException 如果卡片未發布,
已新增至 API 等級 XE12

公開 void 發布 (LiveCard.PublishMode 模式)

將這張資訊卡發布至時間軸。

資訊卡必須含有動作,且已啟用直接轉譯功能或遠端檢視設定,才會顯示。

參數
模式 決定系統向使用者顯示卡片的方式
已新增至 API 等級 XE12

public LiveCardsetAction(PendingIntent 意圖)

變更選取資訊卡時執行的動作。

參數
意圖 選取 [資訊卡] 後觸發
傳回
  • 這個物件用於呼叫鏈結
已新增至 API 等級 XE12

public LiveCardsetDirectrenderEnabled(布林值啟用)

啟用直接轉譯。

在這個模式下,資訊卡內容必須直接轉譯為 Surface

請注意,只有在卡片未發布時才能呼叫此方法,否則將擲回例外狀況。

參數
啟用 是否應啟用直接轉譯
傳回
  • 這個物件用於呼叫鏈結
另請參閱
已新增至 API 等級 XE16

public LiveCardsetRenderer(GlRenderer 轉譯器)

新增 OpenGL 型轉譯器。

轉譯器會用於繪製 (自動) 到要求端進行直接轉譯的途徑。

傳回
  • 這個物件用於呼叫鏈結
已新增至 API 等級 XE12

public LiveCard setViews (RemoteViews 次查看)

變更用於顯示這張資訊卡 UI 的 RemoteViews

對已發布的卡片進行遠端檢視之後,也應呼叫此方法,否則這些變更將不會反映在時間軸上。

如果啟用直接轉譯,這個方法就不會生效。

參數
次瀏覽 資訊卡的 UI
傳回
  • 這個物件用於呼叫鏈結
已新增至 API 等級 XE21

public LiveCardsetVoiceActionEnabled(布林值啟用)

在時間軸上顯示資訊卡時,啟用語音操作。

設定完成後,卡片會在時間軸上顯示時聽「Ok Glass」,並在執行這個防護語句時觸發由 setAction(PendingIntent) 方法設定的意圖。如果意圖啟動的活動實作了內容語音選單,則該活動會自動在第一個選單項目中開啟 (就像在活動本身中說出「Ok Glass」一樣)。這項功能可以在即時資訊卡上實作關聯語音選單。

參數
啟用 是否應啟用語音操作
傳回
  • 這個物件用於呼叫鏈結
已新增至 API 等級 XE12

公開 void unpublish ()

從時間軸取消發布這張資訊卡。