首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Manifest Intent-filter 配置錯誤導致 Activity 無法啟動:action 名稱與 category 詳解

     編輯:程式設計綜合問答

問題現象

Splash Activity 5 秒後啟動 StartingPoint Activity,但應用啟動後無反應,無報錯。

錯誤 Manifest 分析

<activity android:name=".Splash">
    <intent-filter>
        <action android:name="android.intent.action.SPLASH" /> <!-- 錯誤:非標準啟動 action -->
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".StartingPoint"> <!-- 缺少 intent-filter -->
</activity>

標準啟動配置

入口 Activity (Launcher)

<activity android:name=".Splash">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" /> <!-- 標準入口 -->
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <!-- 可選:額外 action 供其他組件調用 -->
    <intent-filter>
        <action android:name="com.example.ACTION_SPLASH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

普通 Activity (內部跳轉)

<activity android:name=".StartingPoint">
    <intent-filter>
        <action android:name="com.example.learn.tam.StartingPoint" /> <!-- 自定義 action -->
        <category android:name="android.intent.category.DEFAULT" /> <!-- 隱式啟動必需 -->
    </intent-filter>
</activity>

代碼修正:顯式 Intent 替代隱式 Intent

強烈建議 使用顯式 Intent,不依賴 Manifest action 解析:

// Splash.java
Intent intent = new Intent(Splash.this, StartingPoint.class);
startActivity(intent);
finish(); // 關閉 Splash

優勢:編譯期檢查、無需 Manifest action、性能更高、安全可控。

Intent-filter 核心規則

  • 隱式 Intent 啟動 Activity **必須** 匹配 action + category=DEFAULT (除 LAUNCHER)。
  • 同一 Activity 可多個 intent-filter,匹配任一即可啟動。
  • 避坑清單

    1. 自定義 action 命名用包名前綴:com.example.ACTION_XXX,避免衝突。
    2. 內部跳轉**優先用顯式 Intent**,隱式 Intent 留給系統/第三方調用 (分享、瀏覽器鏈接)。
    3. android:exported="true" (API 31+ 必須顯式聲明) 控制組件是否可被其他應用啟動。

    Manifest Intent-filter 配置錯誤是新手高頻阻塞點:入口用 MAIN+LAUNCHER,內部跳轉用顯式 Intent,隱式 Intent 需 DEFAULT category,自定義 action 加包名前綴。

    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved
    屬性含義常見值
    action動作類型MAIN, VIEW, SEND, 自定義字符串
    category額外分類LAUNCHER(桌面圖標), DEFAULT(隱式啟動必需), BROWSABLE(瀏覽器鏈接)
    data數據匹配scheme, host, path, mimeType