Search code examples
androidintentfilter

How can I start MAIN activity with the help of <intent-filter>?


When I declare my main activity in this maner:

<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>

then I get an error No Activity found to handle Intent { act=com.package.name.MyActivity flg=0x24000000 } when I am using this code:

Intent intent = new Intent("com.package.name.MyActivity");
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

If do not use Intent i = new Intent(this, MyActivity.class); how can I do this with the help of action for <intent-filter>

Didn't help:

 <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>

code:

Intent intent = new Intent("com.package.name.VIEW");
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

Solution

  • Try to specify two intent filters:

    <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>
    

    Then you can start the activity using the action name:

    Intent intent = new Intent("com.package.name.MyAction");
    context.startActivity(intent);
    

    or the class name:

    Intent intent = new Intent(context, MyActivity.class);
    context.startActivity(intent);