Reputation: 1312
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);
Upvotes: 6
Views: 20219
Reputation: 28541
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);
Upvotes: 8
Reputation: 8477
Your class name isn't com.package.name.MyActivity
, it's com.package.name.general.MyActivity
.
An easy way to avoid this mistake is to create your new Intent using a class instead of a package name. You can use auto-complete to fill in the right class.
You say you don't want to create the Intent by specifying the class. I wonder why not -- I think it's a good way to go.
Upvotes: 0
Reputation: 22637
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.
Upvotes: 1