Пользовательские категории Android

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

Я хочу узнать программно, какие действия определены ТОЛЬКО в моем AndroidManifest.xml

Предположим, у меня есть:

< activity android:name="example.mainActivity" android:label="mainActivity">  
    < intent-filter>  
        < action android:name="android.intent.action.MAIN" />  
        < category android:name="android.intent.category.LAUNCHER" />  
    < /intent-filter>  
< /activity>  
< activity android:name="example.activity1" android:label="Activity1">  
    < intent-filter>  
        < action android:name="android.intent.action.VIEW" />  
        < category android:name="example.custom.ACTIVITY" />  
    < /intent-filter>  
< /activity>  
< activity android:name="example.activity2" android:label="Activity2">  
    < intent-filter>  
        < action android:name="android.intent.action.VIEW" />  
        < category android:name="example.custom.ACTIVITY" />  
    < /intent-filter>  
< /activity>  

Я хочу, чтобы в mainActivity динамически читались Activity1 и Activity2, потому что, когда я добавляю Activity3, например, он будет автоматически прочитан.

Намерение намерение = новое намерение ("android.intent.action.VIEW"); намерение.addCategory("example.custom.ACTIVITY"); Список разрешает = getPackageManager().queryIntentActivities(намерение, 0);

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

Я думал, что это можно сделать, определив пользовательскую категорию, example.custom.ACTIVITY, и в mainActivity используйте packageManager.queryIntentActivities (намерение намерения, флаги int), но, похоже, это не работает.

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


person marian    schedule 21.04.2010    source источник


Ответы (1)


В моем приложении я определил действия как «android.intent.action.MAIN» (а не «android.intent.action.VIEW»), и поиск работает так, как вы ожидали:

Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory("com.example.ACTIVITY");
PackageManager pm = getPackageManager(); 
List<ResolveInfo> list = pm.queryIntentActivities(intent, 0); 

ps, я использовал «com.example», поскольку «example» не является хорошим примером пространства имен, поскольку объявление пакета в вашем манифесте должно иметь как минимум два сегмента (см. здесь)

person erezmk    schedule 07.07.2013