20

是否可以触发明确的意图,但不是针对我项目中的活动,而是针对其他应用程序中的活动。

我确定这段代码,我知道它正在运行

Intent i=new Intent(this,MyActivity.class);

但是有可能做这样的事情吗

Intent i=new Intent(this,com.bzz.bla.bla.SomeActivity.class);

我的意思是从其他应用程序(包含在其他 apk 中的活动)显式启动活动的确切方式是什么,这可能吗?

我试过了,但它让我强制关闭消息。

4

5 回答 5

41

是的,这是可能的。但是意图的创造是不同的。试试这个:

Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivityForResult(intent);
于 2011-07-26T11:46:24.100 回答
8

是的,这是可能的。但是意图创建有点不同。

Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivity(intent);

但是,那么您就不能调用任何随机应用程序的任何活动。该特定活动应该有一个带有 MAIN 操作的意图过滤器。

于 2011-07-26T11:23:22.603 回答
4

您可以通过意图启动任何组件,只需要知道操作或目标组件(pkg,cls)名称。
考虑我开发了两个应用程序 app1 & app2 app1 pkg name is com.xyz.app1 & app2 pkg name iscom.xyz.app2.

app1有两个活动App1MainActivity& App1XyzActivityapp2现在只有一个活动App2MainActivity我想从app2 App2MainActivity app2 App2MainActivity有两个按钮 b1 & b2 点击 b1 我想启动 App1MainActivity & 点击 b2 我想开始然后App2MainActivity 中按钮 b1 和 b2 的代码是
App1XyzActivity

b1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {


        Intent i = new Intent();
        String pkg = "com.xyz.app1";
        String cls = "com.xyz.app1.App1MainActivity";
        i.setComponent(new ComponentName(pkg, cls));
        App2MainActivity.this.startActivity(i);

    }
});

b2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {


        Intent i = new Intent();
        String pkg = "com.xyz.app1";
        String cls = "com.xyz.app1.App1XyzActivity";
        i.setComponent(new ComponentName(pkg, cls));
        App2MainActivity.this.startActivity(i);

    }
});

现在我安装了两个应用程序 app1 和 app2 并运行 app2。
当我单击按钮 b1 时,app1 App1MainActivity 已启动,但如果我单击按钮 b2,则会发生异常,原因是即使您知道包名称及其类名,我们也无法随机启动另一个应用程序的任何活动,但您可以启动另一个应用程序主活动,如果它有带有动作 MAIN 的意图过滤器,并且你知道它的包名和类名。

于 2014-08-19T08:05:57.770 回答
1

我建议用点连接包和类名;

这加快了复制和粘贴,例如。在编写 jUnit 测试时。

String packageName = getApplicationContext().getPackageName();
String className = "SomeActivity";

Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, packageName + "." + className));
startActivity(intent);
于 2017-02-13T00:07:24.433 回答
0
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("np.birthday.com.order", "np.birthday.com.order.MainActivity");// intent.setClassName("Package NAme of another application", "np.birthday.com.order.MainActivity");
startActivity(intent);
于 2016-05-25T06:31:05.760 回答