android activity 隐式跳转遇到的问题

AndroidManifest.xml内如下设置

        <!-- 首页 -->
        <activity
            android:name=".MainActivity"
            android:label="XXX"
            android:roundIcon="@mipmap/ic_launcher">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="view" />
            </intent-filter>
        </activity>

代码中设定其他活动使用隐式跳转

        intent = new Intent("android.intent.action.MAIN");
        intent.addCategory("android.intent.category.LAUNCHER");
        getContext().startActivity(intent);

的方式往该活动跳转时,弹出一个选择打开app的界面,而且该活动不能正常显示,使用显示跳转

        intent = new Intent(((Activity)getContext()), MainActivity.class);
        getContext().startActivity(intent);

就可以了,是什么原因导致的呢?在网上查了一些资料也没找到相关的说明。

20170922更新
参照luoxieting的回答修改代码
AndroidManifest.xml如下

        <activity
            android:name=".MainActivity"
            android:label="XXX"
            android:roundIcon="@mipmap/ic_launcher">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="toMainActivity" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="view" />
            </intent-filter>
        </activity>

程序中隐式跳转依然不起作用并且报错,继续查找原因
这个地址发现了这么一句话

匹配规则中必须添加“android.intent.category.DEFAULT”这个过滤条件;

于是再次修改代码

        <activity
            android:name=".MainActivity"
            android:label="XXX"
            android:roundIcon="@mipmap/ic_launcher">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="toMainActivity" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="view" />
            </intent-filter>
        </activity>

测试跳转成功。

阅读 7.8k
2 个回答

<category android:name="android.intent.category.LAUNCHER" />
上面代码代表的意思是桌面是否显示图标,如果没有这行代码,手机页面就看不到该应用的图标了,很多插件就是这样做的。
每一个有图标的应用都有这个category,所以当你那样写时,它分辨不出你要往哪个应用的category跳转,所以让你选择应用。
我一般是定义一个唯一的action,然后使用action来作为隐式跳转。
<activity

        android:name=".MainActivity"
        android:label="XXX"
        android:roundIcon="@mipmap/ic_launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="my_test_action" />
        </intent-filter>
    </activity>
    
     intent = new Intent();
    intent.setAction("my_test_action");
    getContext().startActivity(intent);
    

有多个Activity都注册为 <action android:name="android.intent.action.MAIN" />

                 <category android:name="android.intent.category.LAUNCHER" />了吧,所以让你选择
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题