【筆記】【Android】Manifest中的intent-filter使用

GiraKoo發表於2024-10-30

【筆記】【Android】Manifest中的intent-filter使用

筆記系列,內容是從網路搜尋的結果,不一定是正確的理解。
如果存在謬誤,歡迎大家指正。

intent-filter是為了標明Activity,Service或者Braodcast Receiver可以相應的intent型別。

基本結構

<activity android:name=".YourActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>
  • action: 定義了Intent的Action。例如android.intent.action.MAIN表示應用的主入口點。
  • category: 是對Action的補充。例如android.intent.category.LAUNCHER標明該Activity是應用的啟動器。
  • data: 定義了該應用可以處理的URI、MIME型別。例如<data android:mimeType="image/*" />表示該Intent處理所有影像型別的資料。

常用Action型別

在Android開發中,Action是Intent的一個重要屬性,它定義了Intent要執行的操作。系統預定義了許多常用的Action,開發者也可以自定義Action。以下是一些常用的系統預定義Action及其說明:

android.intent.action.MAIN

說明: 表示應用的入口點。通常用於啟動Activity,作為應用的主介面。
使用場景: 通常與android.intent.category.LAUNCHER一起使用,表示該Activity是應用的啟動器。

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

android.intent.action.VIEW

說明: 用於檢視資料。系統會根據資料的型別(如URI或MIME型別)來決定使用哪個應用來處理這個Intent。
使用場景: 檢視網頁、圖片、影片、地圖等。

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.example.com"));
startActivity(intent);

android.intent.action.SEND

說明: 用於傳送資料。通常用於分享內容,如文字、圖片等。
使用場景: 分享文字、圖片、檔案等。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Hello, this is a message!");
startActivity(Intent.createChooser(intent, "Share via"));

android.intent.action.DIAL

說明: 用於撥打電話。系統會開啟撥號介面,並預填充電話號碼。
使用場景: 撥打電話。

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:1234567890"));
startActivity(intent);

android.intent.action.CALL

說明: 用於直接撥打電話。需要CALL_PHONE許可權。
使用場景: 直接撥打電話。

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:1234567890"));
startActivity(intent);

android.intent.action.EDIT

說明: 用於編輯資料。系統會根據資料的型別來決定使用哪個應用來處理這個Intent。
使用場景: 編輯文件、圖片等。

Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(Uri.fromFile(new File("/sdcard/document.txt")));
startActivity(intent);

android.intent.action.PICK

說明: 用於選擇資料。通常用於從檔案系統中選擇檔案或聯絡人。
使用場景: 選擇圖片、聯絡人等。

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE);

android.intent.action.GET_CONTENT

說明: 用於獲取內容。通常用於從檔案系統中選擇檔案。
使用場景: 選擇檔案、圖片等。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE);

android.intent.action.SENDTO

說明: 用於傳送資料到特定的URI。通常用於傳送簡訊或電子郵件。
使用場景: 傳送簡訊、電子郵件等。

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:recipient@example.com"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Message body");
startActivity(intent);

說明: 用於執行網路搜尋。系統會開啟預設的瀏覽器並執行搜尋。
使用場景: 執行網路搜尋。

Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "search query");
startActivity(intent);

android.intent.action.BATTERY_LOW

說明: 用於監聽電池電量低的廣播。通常用於Broadcast Receiver。
使用場景: 監聽電池電量低的廣播。

<receiver android:name=".BatteryLowReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_LOW" />
    </intent-filter>
</receiver>

android.intent.action.BOOT_COMPLETED

說明: 用於監聽系統啟動完成的廣播。通常用於Broadcast Receiver。
使用場景: 監聽系統啟動完成的廣播。

<receiver android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Category

CATEGORY_DEFAULT
CATEGORY_BROWSABLE
CATEGORY_TAB
CATEGORY_ALTERNATIVE
CATEGORY_SELECTED_ALTERNATIVE
CATEGORY_LAUNCHER
CATEGORY_INFO
CATEGORY_HOME
CATEGORY_PREFERENCE
CATEGORY_TEST
CATEGORY_CAR_DOCK
CATEGORY_DESK_DOCK
CATEGORY_LE_DESK_DOCK
CATEGORY_HE_DESK_DOCK
CATEGORY_CAR_MODE
CATEGORY_APP_MARKET
CATEGORY_VR_HOME

相關文章