Android通过intentfilter启动器以编程方式从包名获取活动

Android通过intentfilter启动器以编程方式从包名获取活动,android,android-activity,package,android-package-managers,Android,Android Activity,Package,Android Package Managers,我从第三方应用程序中获得此程序包名称: "com.example.packagename" 此应用程序有一个包含intentFilter和类别启动器的活动: <category android:name="android.intent.category.LAUNCHER"/> 如何以编程方式从包名称中检索此活动名称?查找第三方Termux应用程序(包名称:“com.Termux”)的laucher活动 Snipplet:方法1 如果需要活动名称和组件名称 String pac

我从第三方应用程序中获得此程序包名称:

"com.example.packagename"
此应用程序有一个包含intentFilter和类别启动器的活动:

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


如何以编程方式从包名称中检索此活动名称?

查找第三方Termux应用程序(包名称:“com.Termux”)的laucher活动

Snipplet:方法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
Activity:  Activity :  com.termux.app.TermuxActivity
ActivityCheck:  Activity : com.termux.app.TermuxActivity package name: com.termux
Snipplet::方法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);

}
注意:

如果要启动程序包的启动程序活动

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.");
}
如果要从启动程序活动中查找包名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);
    }
}

答案很清楚!如果我可以问一个链接的问题(实际上是相反的问题):我可以通过编程从活动中获取包名吗?你的意思是,如果你给出“TermuxActivity”,代码将返回其包名“com.termux”?在这种情况下,您可以使用方法2。但该活动必须是laucher活动。更新了答案。请检查并标记它是否有用。