Android目标组件的显式意图

时间:2011-07-26 11:17:02

标签: android android-intent explicit

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

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

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

但是可以做这样的事吗

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

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

我试过了,但是我强行关闭了消息。

5 个答案:

答案 0 :(得分:36)

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

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);

答案 1 :(得分:6)

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

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操作的intent-filter。

答案 2 :(得分:3)

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

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

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和app两个应用程序app2并运行app2 当我点击按钮b1然后app1 App1MainActivity开始,但如果我点击按钮b2异常发生原因是我们无法随机启动另一个应用程序的任何活动,即使你知道包名称及其类名,但你可以开始另一个app主要活动,如果它有意图过滤动作MAIN,如果你知道它的包名和类名。

答案 3 :(得分:1)

我建议连接包&带点的类名;

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

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

Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, packageName + "." + className));
startActivity(intent);

答案 4 :(得分: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);