从一个应用程序调用另一个应用程序中的活动(Android)

3

我想从另一个应用程序的活动中调用一个应用程序的活动。这里我正在做的是:

                Intent intent = new Intent();
                intent.setClassName("another_app_package_name", "another_app_package_name.class_name_in_that_package");

                startActivity(intent);

但是我的应用程序退出并抛出NoActivityFound异常,说找不到另一个应用程序包中的类another_app_package_name.class_name_in_that_package。

我肯定是忽略了某些明显的问题。我对Android平台还比较陌生。

3个回答

8
final Intent intent = new Intent();

ComponentName cName = new ComponentName
("package_name","package_name.class_name");

intent.setComponent(cName);         
startActivity(intent);

这个方法有效。我亲测可行!


1

类似这样的代码可以正常工作:

final Intent intent = new Intent();
intent.setComponent(new ComponentName("<package_name>", "<activity_class_name"));
context.startActivity(intent);

但是,拥有您想要启动的活动的应用程序必须在其清单中声明具有 "导出" 的活动。如果该活动没有声明任何意图过滤器,则该选项的默认值为false。


0
尝试类似这样的东西
final Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN); //might not be necessary
i.setClassName("com.htc.android.worldclock", "com.htc.android.worldclock.WorldClockTabControl");
startActivity(i);

类名(例如“com.htc.android.worldclock.WorldClockTabControl”)必须是完全限定的。

如果这不起作用,请尝试使用您的意图类名字符串调用以下方法:

public static boolean isIntentAvailable(final Context context,
        final String action) {
    final PackageManager packageManager = context.getPackageManager();
    final Intent intent = new Intent(action);
    final List<ResolveInfo> list = packageManager.queryIntentActivities(
            intent, PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

并查看它返回了什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接