[TOC] 1. Intent啟動器 1.1. Intent的用途 1. 啟動Activity :希望返回結果 2. 啟動服務 啟動一個不適用用戶界面而在後臺執行操作的組件 :下載文件等,可攜帶任何必要的數據 : 使用客戶端 伺服器介面,從其他組件綁定到此服務 3. 傳遞廣播 廣播是任何應用均可接收 ...
目錄
1. Intent啟動器
1.1. Intent的用途
1. 啟動Activity
startActivity()
startActivityForResult()
:希望返回結果2. 啟動服務
啟動一個不適用用戶界面而在後臺執行操作的組件
startService()
:下載文件等,可攜帶任何必要的數據
bindService()
: 使用客戶端-伺服器介面,從其他組件綁定到此服務
3. 傳遞廣播
廣播是任何應用均可接收的消息。系統將針對系統事件(例如:系統啟動或設備開始充電時)傳遞各種廣播
sendBroadcast()
sendOrderedBroadcast()
sendStickyBroadcast()
1.2. Intent類型
1.顯示Intent
按名稱(完全限定類名)指定要啟動的組件
- 系統將立即啟動 Intent 對象中指定的應用組件
// Executed in an Activity, so 'this' is the Context
// The fileUrl is a string URL, such as "http://www.example.com/image.png"
Intent downloadIntent = new Intent(this, DownloadService.class);
downloadIntent.setData(Uri.parse(fileUrl));
startService(downloadIntent);
2.隱式Intent
不會指定特定的組件,而是聲明要執行的常規操作,從而允許其他應用中的組件來處理它。
- Android 系統通過將 Intent 的內容與在設備上其他應用的清單文件中聲明的 Intent 過濾器進行比較,從而找到要啟動的相應組件。 如果 Intent 與 Intent 過濾器匹配,則系統將啟動該組件,並向其傳遞 Intent 對象。 如果多個 Intent 過濾器相容,則系統會顯示一個對話框,支持用戶選取要使用的應用。
- Intent 過濾器是應用清單文件中的一個表達式,它指定該組件要接收的 Intent 類型。
// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");
// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(sendIntent);
}
2. 構建Intent
Intent包含的主要信息如下:
- 組件名稱-用於顯示Intent
- 操作:指定用於執行的通用操作-用於隱式Intent
ACTION_VIEW
ACTION_SEND
- 數據
- 類別:
- Extra: putExtra()
- 標誌
3. 隱式Intent
<activity android:name="MainActivity">
<!-- This activity is the main entry, should appear in app launcher -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ShareActivity">
<!-- This activity handles "SEND" actions with text data -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<!-- This activity also handles "SEND" and "SEND_MULTIPLE" with media data -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.google.panorama360+jpg"/>
<data android:mimeType="image/*"/>
<data android:mimeType="video/*"/>
</intent-filter>
</activity>
第一個 Activity MainActivity 是應用的主要入口點。當用戶最初使用啟動器圖標啟動應用時,該 Activity 將打開:
- ACTION_MAIN 操作指示這是主要入口點,且不要求輸入任何 Intent 數據。
CATEGORY_LAUNCHER 類別指示此 Activity 的圖標應放入系統的應用啟動器。 如果
- ACTION_MAIN 操作指示這是主要入口點,且不要求輸入任何 Intent 數據。
第二個 Activity ShareActivity 旨在便於共用文本和媒體內容。 儘管用戶可以通過從 MainActivity 導航進入此 Activity,但也可以從發出隱式 Intent(與兩個 Intent 過濾器之一匹配)的另一應用中直接進入 ShareActivity