Пользовательское намерение Android не может начать действие (да, я включаю категорию ПО УМОЛЧАНИЮ) - PullRequest
1 голос
/ 05 июля 2011

Я искал и искал и не могу найти ответ на этот конкретный вопрос о пользовательских намерениях.

У меня есть приложение с четырьмя действиями, 1 - основное, которое настраивает вещи, а остальные 3 представляют различные экраны, которые я представляю пользователю. Я пытаюсь использовать собственные намерения, чтобы начать различные действия.

Вот мой AndroidManifext.xml:

<?xml version="1.0" encoding="utf-8"?>

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Activities.REDB_main" android:label="@string/app_name"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Activities.ChooseCards" android:launchMode="singleTop">
        <intent-filter>
            <action android:name="@string/ACTION_VIEW" />
            <action android:name="@string/ACTION_REFRESH" />
            <category android:name="@string/CATEGORY_SHUFFLE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name=".Activities.SelectSets" android:launchMode="singleTop">
        <intent-filter>
            <action android:name="@string/ACTION_VIEW" />
            <action android:name="@string/ACTION_REFRESH" />
            <category android:name="@string/CATEGORY_SELECT_SETS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name=".Activities.SelectCards" android:launchMode="singleTop"
        android:permission="android.permission.ACCESS_CHECKIN_PROPERTIES">
        <intent-filter>
            <action android:name="@string/ACTION_VIEW" />
            <action android:name="@string/ACTION_REFRESH" />
            <category android:name="@string/CATEGORY_SELECT_CARDS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

Я создаю категорию для каждого приложения, а затем два вида действий, которые я хочу выполнить. Я знаю, что могу использовать явные намерения, но, поскольку я хочу совершать разные действия, я решил, что создание неявных намерений будет работать лучше.

Я называю первое из моих реальных действий изнутри моей главной с этим:

 Intent intent = new Intent().setAction(getString(R.string.ACTION_VIEW));
 intent.addCategory(getString(R.string.CATEGORY_SHUFFLE));
 startActivity(intent);

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

При поиске в Интернете я всегда нахожу примеры с данными, которые также используются. Я возился с добавлением данных, чтобы посмотреть, было ли это необходимо, но, похоже, это не имело значения.

На немного другой ноте, есть ли другой способ управления потоком моей программы, кроме намерений? Причина, по которой у меня есть два действия, заключается в том, что одно переключает представление, а другое просто обновляет данные, поэтому, когда пользователь переключается на экран позже, он не видит, что он быстро обновляет данные, а вместо этого - просто новый материал.

Ответы [ 2 ]

1 голос
/ 05 июля 2011

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

Я скорее сомневаюсь в этом.В основном вы используете <intent-filter>, когда вы хотите, чтобы компонент запускал компонент, отличный от вашего собственного приложения (например, сторонние приложения).

Кроме того, я сомневаюсь, что вы хотите android:launchMode="singleTop" для всех этих компонентов.И я очень уверен, что вам не нужно android:permission="android.permission.ACCESS_CHECKIN_PROPERTIES" на последнем, так как вы, скорее всего, не сможете запустить свою собственную деятельность.

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

Я никогда не видел, чтобы приложение Android использовало строковый ресурс для элемента <category>.Возможно, это усугубляет ваши трудности.Кроме того, поскольку элементы <category> не приносят вам пользы, которую я вижу (кроме вашей LAUNCHER единицы), мне непонятно, зачем вы их туда поместили.

Я предлагаю вам просто отбросить <intent-filter> элементов и использовать явные Intents.

0 голосов
/ 09 декабря 2015

Не используйте строки ресурсов для выполнения намерений, используйте android.intent.action.VIEW вместо

...