Подтвердить что ты не робот

Что такое фильтры намерений в Android?

В моем приложении для Android я хотел начать действие "B" из начальной активности "A". Я создал классы для обоих. Однако при использовании следующего кода для запуска B я получаю ошибку времени выполнения: application has stopped unexpectedly, try again. Вот мой код:

Intent myIntent = new Intent(this, AddNewActivity.class);
startActivity(myIntent); 

Когда я добавил новую запись в AndroidManifest.xml/manifest/application/activity/intent-filers для действия B, тогда приложение работало.

У меня есть два вопроса:

  • Когда в AndroidManifest.xml есть несколько записей активности, как андроид знает, с какой целью начать сначала?
  • Я не мог понять фильтры намерения. Может кто-нибудь объяснить.

Вот мой частичный AndroidManifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".ListAllActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".AddNewActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
4b9b3361

Ответ 1

Когда есть несколько действий записи в AndroidManifest.xml, как знает андроид начать сначала?

Нет "первого". В вашем случае, с вашим манифестом, как показано, у вас будет две иконки в вашей пусковой установке. Независимо от того, что пользователь забирает, запускается.

Я не мог понять фильтры намерения. Может кто-нибудь объяснит.

Существует довольно много документации по этому вопросу. Пожалуйста, прочитайте это, а затем задайте более конкретные вопросы.

Кроме того, когда вы получаете сообщение "неожиданно остановилось приложение, попробуйте еще раз", используйте adb logcat, DDMS или перспективу DDMS в Eclipse, чтобы проверить трассировку стека Java, связанную с ошибкой.

Ответ 2

Фильтр намерений - это выражение в файле манифеста приложения, в котором указывается тип намерений, которые компонент хотел бы получить.

Когда вы создаете неявное намерение, система Android находит соответствующий компонент для начала, сравнивая содержимое намерения с фильтрами намерений, объявленными в файле манифеста других приложений на устройстве. Если цель совпадает с фильтром намерения, система запускает этот компонент и доставляет ему объект Intent.

AndroidManifest.xml

<activity android:name=".HelloWorld"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="http" android:host="androidium.org"/>
    </intent-filter>
</activity>

Запустить HelloWorld

Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse("http://androidium.org"));
startActivity(intent);

Ответ 3

Сначала измените xml, отметьте свое второе действие как DEFAULT

<activity android:name=".AddNewActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

Теперь вы можете инициировать это действие с помощью метода StartActivity.

Ответ 4

Когда вы создаете неявное намерение, система Android находит соответствующий компонент для начала, сравнивая содержимое намерения с фильтрами намерений, объявленными в файле манифеста других приложений на устройстве. Если цель совпадает с целевым фильтром, система запускает этот компонент и доставляет ему объект Intent. Если несколько фильтров намерения совместимы, система отображает диалоговое окно, чтобы пользователь мог выбрать, какое приложение использовать.

Фильтр намерений - это выражение в файле манифеста приложения, в котором указывается тип намерений, которые компонент хотел бы получить. Например, объявив фильтр намерений для активности, вы позволяете другим приложениям напрямую запускать вашу деятельность с определенным намерением. Аналогично, если вы не объявляете какие-либо фильтры намерений для активности, тогда ее можно запустить только с явным намерением.

В соответствии с: Intents и Intent Filters

Ответ 5

Сохраните первый фильтр намерения с помощью клавиш MAIN и LAUNCHER и добавьте еще один как ANY_NAME и DEFAULT.

Ваш LAUNCHER будет активностью A и DEFAULT будет вашей деятельностью B.

Ответ 6

Не может быть двух Lancher AFAIK. Logcat - полезный инструмент для отладки и проверки состояния приложения/машины взади. он будет автоматически переключаться с одного действия на другой.

Ответ 7

Activity, который вы должны обедать при открытии приложения, упоминает его как LAUNCHER в категории намерений, а в остальных действиях упоминается Default в категории намерений.

Например: - Существует 2 действия A и B
 Действие A является LAUNCHER, поэтому сделайте его как LAUNCHER в категории целей, а B является дочерним для Activity A, поэтому сделайте его как DEFAULT.

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".ListAllActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".AddNewActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

Ответ 8

target filter - это выражение, которое присутствует в манифесте вашего приложения, которое указывает тип намерений, которые должен получить компонент. Если у компонента нет фильтра намерений, он может получить явное намерение. Если компонент с фильтром получает как неявное, так и явное намерение

Ответ 9

Если возможно, попробуйте это одно мгновенное решение:

Intent intent =new Intent(getApplicationBaseContext,second_Act.class);
StartActivity(intent);