Как я могу запустить MAIN-активность с помощью <намерения-фильтра>?

Когда я объявляю свою основную деятельность в этом приложении:

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

То я получаю сообщение об ошибке « 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); 

Если вы не используете 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> 

код:

 Intent intent = new Intent("com.package.name.VIEW"); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(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> 

Затем вы можете начать свою деятельность с помощью имени действия:

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

Или имя класса:

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

Атрибут name в теге action – это имя действия, а не название вашей активности. Удалите строку,

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

Поскольку тег фильтра намерения находится под тегом активности, система уже понимает, что он применяется к этой активности.

Имя вашего класса не является com.package.name.MyActivity , это com.package.name.general.MyActivity .

Легкий способ избежать этой ошибки – создать новое намерение, используя класс вместо имени пакета. Вы можете использовать автозаполнение, чтобы заполнить нужный класс.

Вы говорите, что не хотите создавать намерение, задавая класс. Интересно, почему нет – я думаю, что это хороший путь.