2

只是一个小问题:

例如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中是否有任何功能可能相同?

4

1 回答 1

3

您可以通过以下方式获取包的所有活动:

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);
于 2013-10-27T22:33:00.960 回答