Запуск определенного действия из приложения

Небольшая проблема:

Например, у меня есть действие TestActivity в моем приложении com.example.testapp
, но у этого действия нет флага android.intent.category.LAUNCHER

теперь мой вопрос: как я могу проверить, существует ли данное действие subpackage.SomeActivity
в пакете com.test.somepackage

это будет то же самое, что ввести в консоли:

adb shell am start -n com.test.somepackage/subpackage.SomeActivity

и если он существует, как я могу запустить его из другого приложения?

×××××, чтобы прояснить мой вопрос ×××××

я ищу функции в android вроде
Intent startthis = new Intent (packagename, activityname);

и, если возможно, что-нибудь вроде
ActivityInfo[] ai = fetchAllActivitysFromPackage(packagename);

есть ли какая-нибудь функция в Android, которая, вероятно, делает то же самое?


person bricklore    schedule 27.10.2013    source источник
comment
зачем вам это?   -  person hichris123    schedule 28.10.2013
comment
Этот вопрос решает вашу проблему?   -  person Alfredo Cavalcanti    schedule 28.10.2013
comment
@ hichris123 мне это нужно, потому что я хочу иметь список со всеми установленными приложениями и всеми непосредственно вызываемыми действиями (нет лучшей причины)   -  person bricklore    schedule 28.10.2013
comment
Затем вы можете использовать PackageManager developer.android.com / reference / android / content / pm /.   -  person hichris123    schedule 28.10.2013
comment
я уже так далеко. Моя последняя проблема - как выбрать действие для запуска, если я знаю название пакета? что-то вроде new Intent (packagename, activityname) и, если возможно, что-то вроде ActivityInfo[] ai = fetchAllActivitysFromPackage(packagename) те функции, которые я ищу, или что-нибудь, что делает то же самое   -  person bricklore    schedule 28.10.2013


Ответы (1)


Получить все мероприятия для пакетов можно следующим образом:

List<PackageInfo> installedPackages = getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);
Iterator packageIterator = installedPackages.iterator();
PackageInfo packageInfo = null;
while(packageIterator.hasNext()){
    packageInfo = (PackageInfo) packageIterator.next();
    if(packageInfo.activities != null){
        for(ActivityInfo activity : packageInfo.activities){
            Log.d("ACTIVITY", activity.name);
        }
    }
}

Однако вы можете запустить внешнее действие только в том случае, если это приложение определило для него фильтр намерений, и если теперь у вас есть точное ДЕЙСТВИЕ фильтра намерений.

Обновление: чтобы получить все действия для одного имени пакета, используйте:

PackageInfo packageInfo = getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
person Jeffrey Klardie    schedule 27.10.2013
comment
спасибо, что работает как шарм для моего первого вопроса, спасибо! я сам узнал, как начать одно из действий позже: Intent intent = new Intent(); intent.setClassName("com.test.packagename", ".Activity"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(intent); - person bricklore; 28.10.2013