Какова цель пользовательской категории или действия? - PullRequest
5 голосов
/ 03 сентября 2011

Я читаю Начало разработки приложений для Android от Вей-Мун Ли.Я запутался в пользовательских действиях и категориях.

Вот код из одного примера.Действие - это имя пакета.Единственный раз, когда он упоминается когда-либо снова, это

Intent i = new Intent( "net.learn2develop.MyBrowser" );

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

То же самое с тегом категории (другой пример):

<intent-filter>
   <action android:name=”android.intent.action.VIEW” />
   <action android:name=”net.learn2develop.MyBrowser” />
   <category android:name=”android.intent.category.DEFAULT” />
   <category android:name=”net.learn2develop.Apps” />
   <data android:scheme=”http” />
</intent-filter>

net.learn2develop.Apps - это имя, которое было составлено автором,Это действительно не имеет смысла, верно?Какую цель он служит?

Ответы [ 2 ]

8 голосов
/ 03 сентября 2011

Как получается, что это действие, которое в основном является именем пакета, может знать о начале действия?

Поскольку <intent-filter> действия объявило, что оно может быть запущеночерез эту строку действия.Кстати, то, что оно написано как имя пакета, не означает, что оно должно быть именем пакета (например, android.intent.action.VIEW не является пакетом).Соглашение об именовании пакетов - это предотвращение случайных столкновений с другими установленными приложениями.

Это действительно не имеет смысла, верно?

Ну, это, наверное, что-то значило для автора, хотя я не могу сказать, что именно.

Какую цель это служит?

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

Категории обычно используются для различения различных вариантов использования.Например, возможно, вторая по популярности категория, кроме DEFAULT, равна BROWSABLE.Действия, поддерживающие действие VIEW в категории BROWSABLE, могут использоваться по ссылкам в веб-браузере.Итак, если у меня было действие для VIEW / BROWSABLE и тип MIME application/pdf, и пользователь щелкнул ссылку в PDF-файле в браузере, я мог бы выбрать просмотр PDF.Однако, если бы мне не хватало BROWSABLE в качестве категории, я бы не имел права на эту ссылку.Как правило, действие будет рекламировать BROWSABLE, только если оно сможет получить URL-адрес HTTP.

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

1 голос
/ 17 ноября 2014

Для каких целей он служит?

В подавляющем большинстве случаев установка или установка категории практически бесполезны.Тем не менее, если вы хотите экспортировать BroadcastReceiver (то есть, чтобы другие приложения могли транслировать на него), но вы хотите ограничить, какие приложения могут фактически активировать приемник, нужно использовать закрытую категорию, известную только темapps.

Очевидно, что это должно быть сделано программно:

intent.addCategory('com.super.dooper.thing.my_sectrect_category')

Если вы помещаете его в манифест, вы объявляете его, и он перестает быть таким личным.

...