TensorFlow on Android (I)
AndroidManifest.xml
裡頭定義了 application 的名稱、圖示、 activity,像是:
<application android:allowBackup="true" android:debuggable="true" android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/MaterialTheme"> <activity android:name="org.tensorflow.demo.ClassifierActivity" android:screenOrientation="portrait" android:label="@string/activity_name_classification"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> </intent-filter> </activity> </application>
Intent (意圖)
## 代表使用者與應用程式的互動,是可用來向另一個應用程式元件要求動作的傳訊物件,例如:按下一個圖示之後撥出電話、或是按下一個按鈕之後轉換到另一個頁面 (另一個 activity)。
## Intent 有三個基本的使用案例
- 如何啟動 ActivityActivity 代表應用程式中的單一畫面。
startActivityIntent()、startActivityForResult()、onActivityResult()...
- 如何啟動 Service
Service 是可以在背景中執行操作的元件,但沒有使用者元件。
startService(Intent)、bindService()...
- 如何傳送 Broadcast
Broadcast 是指任何應用程式都可以接受的訊息。
sendBroadcast(Intent)、sendOrderedBroadcast(Intent, String)、sendStickyBroadcast()...
## Intent 分成兩種類型
- 明確意圖 (或顯式 Intent)再建構 Intent 時就指定 activity 接收者,通常使用在相同的應用程式內部,即啟動應用程式中的元件時。
- 隱含意圖 (或隱式 Intent)
不指定特定的 activity ,而是宣告要執行的一般動作,讓另一個應用程式的原件來處理它,這樣的做法有利於降低發送者跟接收者之間的耦合性,通常適用於不同的應用程式之間。
Intent-filter (意圖過濾器)
當隱含意圖(Intent) 發出時,系統會根據 Intent filter 篩選出合適的 activity 並啟動;
若元件沒有設定 intent filter ,就只能接受到有明確指定 component 的 intent。
Android 是透過 Intent 的 action、data、category 這三個屬性來進行匹配判斷的。而一個 filter list 中的 action、data、category 可以同時有多個。
- action 的匹配規則
若 Intent object 沒有指定 Action,則這個比對就 pass。
Intent filter 內至少要有一項 Action,否則將沒有任何 Intent 可以通過這個 filter。
action 的 filter 可以有很多個,intent object 只要符合其中一個即可。
一個 application 下可以定義多個 activity,而每個 activity 的層級都是相同的。
那麼,該如何決定先啟動哪一個 activity 呢?
android.intent.action.MAIN 決定最先啟動的 Activity
- category 的匹配規則
Intent object 預設會有一個 category 為 android.intent.category.DEFAULT
category 的 filter 可以有很多個,intent object 必須全部符合才算 pass。
android.intent.category.LAUNCHER 決定應用程式是否顯示在程式列表 (手機桌面) 中
如果 activity 有聲明了 android.intent.action.MAIN 但沒有聲明 android.intent.category.LAUNCHER ,則系統會報錯誤訊息,故兩個要同時聲明才會有意義。
而如果有多個 activity 都定義了 MAIN 和 LAUNCHER 則應用程式會出現多個圖示。
- data 的匹配規則
data 包含 mimeType(媒體類型或文件類型) 和 URI 兩個部分。
<data android:mimeType="image/png" android:host="www.myhost.com" android:path="myfolder/subfolder/xxx.png" android:port="2018" android:scheme="http" />
data 的 filter 可以有很多個,intent object 只要符合其中一個即可。
-------------------------------------------------- 2018/10/01更新 --------------------------------------------------
留言
張貼留言