如何在<intent-filter>的帮助下启动MAIN活动?

Svi*_*lav 4 android intentfilter

当我在这个主要方面宣布我的主要活动时:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:windowSoftInputMode="stateHidden"
          android:screenOrientation="portrait">
    <intent-filter>
          <action android:name="android.intent.action.MAIN"/>
          <action android:name="com.package.name.MyActivity"/>
          <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

然后我No Activity found to handle Intent { act=com.package.name.MyActivity flg=0x24000000 }在使用此代码时出错:

Intent intent = new Intent("com.package.name.MyActivity");
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

如果不使用Intent i = new Intent(this, MyActivity.class);我怎么能做到这一点的帮助下action进行<intent-filter>

没有帮助:

 <intent-filter>
      <action android:name="android.intent.action.MAIN"/>
      <action android:name="com.package.name.VIEW"/>
      <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
Run Code Online (Sandbox Code Playgroud)

码:

Intent intent = new Intent("com.package.name.VIEW");
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

Vin*_*rat 6

尝试指定两个intent过滤器:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:windowSoftInputMode="stateHidden"
          android:screenOrientation="portrait">
    <intent-filter>
          <action android:name="android.intent.action.MAIN"/>
          <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
          <action android:name="com.package.name.MyAction"/>
          <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用操作名称启动活动:

Intent intent = new Intent("com.package.name.MyAction");
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

或者班级名称:

Intent intent = new Intent(context, MyActivity.class);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

  • @CommonsWare我发现当第二个`<intent-filter>`包含<category android:name ="android.intent.category.DEFAULT"/> else时,它使用**动作名称**. (5认同)
  • @Svyatoslav:啊,是的,我的道歉.如果没有指定其他类别,`startActivity()`总是将`CATEGORY_DEFAULT`添加到`Intent`.因此,`<activity>`的`<intent-filter>`总是需要`<category>`,无论是`DEFAULT`还是其他东西. (4认同)