Android получает программу с модулем intentfilter от имени пакета программно - PullRequest
1 голос
/ 30 апреля 2019

У меня есть имя этого пакета из стороннего приложения:

"com.example.packagename"

У этого приложения есть активность с intentFilter с категорией Launcher:

<category android:name="android.intent.category.LAUNCHER"/>

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

1 Ответ

2 голосов
/ 30 апреля 2019

Нахождение активности laucher стороннего приложения Termux (имя пакета: "com.termux").

Фрагмент: подход 1

Если вы хотите имя действия и имена компонентов,

String packageName =  "com.termux";
Intent i= getPackageManager().getLaunchIntentForPackage(packageName);
if(i != null && i.getComponent()!=null){
    Log.i("Activity", " Activity getComponent : " +i.getComponent().toString());
    Log.i("Activity", " Activity getClassName: " +i.getComponent().getClassName());
    Log.i("Activity", " Activity getShortClassName : " +i.getComponent().getShortClassName());
} else{
    Log.i("Activity", " Activity not found");
}

Выход:

Activity getComponent : ComponentInfo{com.termux/com.termux.app.TermuxActivity}
Activity getClassName: com.termux.app.TermuxActivity
Activity getShortClassName : .app.TermuxActivity

Фрагмент :: Подход 2 :

PackageManager pm = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage("com.termux");
List<ResolveInfo> activityList = pm.queryIntentActivities(intent, 0);
Collections.sort(activityList, new ResolveInfo.DisplayNameComparator(pm));

for (ResolveInfo temp : activityList) {
    Log.i("Activity", " Activity :  " +temp.activityInfo.name);

}

Выход:

Activity:  Activity :  com.termux.app.TermuxActivity

Примечание:

Если вы хотите запустить Launcher пакета,

String packageName =  "com.termux";
Intent i = getPackageManager().getLaunchIntentForPackage(packageName);
if(i != null){
    startActivity(i);
} else{
    Log.i("Activity", "package not found, ensure the "+packageName+" is installed.");
}

Если вы хотите найти имя пакета из действия Launcher name,

String activityName = "TermuxActivity";

PackageManager pm = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

List<ResolveInfo> activityList = pm.queryIntentActivities(intent, 0);
Collections.sort(activityList, new ResolveInfo.DisplayNameComparator(pm));
for (ResolveInfo temp : activityList) {
    if(temp.activityInfo.name.endsWith(activityName)){
        Log.i("ActivityCheck", " Activity : " +temp.activityInfo.name+ " package name: " +temp.activityInfo.packageName);
    }
}

Выход:

ActivityCheck:  Activity : com.termux.app.TermuxActivity package name: com.termux
...