Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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);
like image 441
Sviatoslav Avatar asked Jul 28 '12 17:07

Sviatoslav


2 Answers

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);
like image 100
Vincent Mimoun-Prat Avatar answered Nov 10 '22 15:11

Vincent Mimoun-Prat


the name attribute in the action tag is the name of the action, not the name of your activity. remove the line,

  <action android:name="com.package.name.MyActivity"/>

since the intent filter tag is under your activity's tag, the system already understands that it's applied to that activity.

like image 22
Jeffrey Blattman Avatar answered Nov 10 '22 14:11

Jeffrey Blattman