2013-05-08 24 views
8

У меня есть приложение со следующими линиями в AndroidManifest:Установка Intents категория программно

<category android:name="android.intent.category.HOME" /> 
<category android:name="android.intent.category.DEFAULT" />        
<category android:name="android.intent.category.MONKEY"/> 

Мой вопрос: можно ли установить эти параметры программно? Я имею в виду, что некоторые пользователи смогут включать или отключать указанные выше параметры.

Что это значит - сохранить приложение в качестве пусковой установки.

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

ИЗДАНИЕ: Я отредактировал этот вопрос, чтобы добавить предложение Rawr.

Вот что я делаю перед вызовом моей основной деятельности:

 Intent myIntent = new Intent(v.getContext(), MainActivity.class); 

     myIntent.addCategory(Intent.CATEGORY_HOME); 
     myIntent.addCategory(Intent.CATEGORY_DEFAULT);    
     myIntent.addCategory(Intent.CATEGORY_MONKEY); 
     startActivity(myIntent); 

Если я использую эти команды внутри мой манифест, они работают. Не удается оставить мое приложение, нажав кнопку «домой». Добавление категорий вручную, как указано выше, не работает.

Любые предложения?

Спасибо заранее!

ответ

5

При создании intent вы можете использовать addCategory для определенных категорий для этого намерения. Согласно android docs, при разрешении этого намерения будут использоваться только действия, которые обеспечивают все указанные категории. Так, например, если вы сделали

Intent i = new Intent(); 
i.addCategory(Intent.CATEGORY_HOME); 
i.addCategory(Intent.CATEGORY_DEFAULT); 

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

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

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.HOME" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

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

+0

Здравствуйте @Rarw! Спасибо, что ответили. Вот что я сделал: \t Intent myIntent = new Intent (v.getContext(), MainActivity.class); \t \t myIntent.addCategory (Intent.CATEGORY_HOME); \t myIntent.addCategory (Intent.CATEGORY_DEFAULT); \t \t myIntent.addCategory (Intent.CATEGORY_MONKEY); startActivity (myIntent); ОДНАКО это не сработало. Если я помещаю эти категории в свой манифест, они работают (вы не можете оставить мое приложение нажатием кнопки «домой»). Когда я делаю это, как вы сказали, это не работает. Вы можете оставить мое приложение нажатием кнопки «домой». –

+0

Я добавил объяснение, почему. Пожалуйста, см. Выше – Rarw

+0

Здравствуйте снова Rarw! Еще раз спасибо за ваше объяснение! Итак, возможно ли все делать программно? Я имею в виду, если у меня есть два пользователя, можно оставить приложение, нажав кнопку «домой», а другой не сможет этого сделать. Возможно ли также программно настроить фильтры намерений? –

3

Я столкнулся с другим способом сделать это - по сути, вы не можете делать то, что вы просите, но вы можете отключить/включить конкретное Activities вашего приложения.

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

Моя информация приходит из following answer по @Commonsware, который я дублируя здесь:


Вы не можете ни включить, отключить или создать <intent-filter> с программным способом.

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


Смежные вопросы