0

我想从另一个应用程序调用一个应用程序。

我的 Java 文件代码:

Intent intent = new Intent(Intent.ACTION_RUN);
intent.setComponent(new ComponentName("Package name", "class name"));
startActivity(intent);

但是我在指定确切的包路径时遇到了问题,而且我不知道 Manifest 中该代码的权限。请帮我解决这个问题。

4

3 回答 3

4

我将假设您的真正意思是要启动另一个应用程序,而不是应用程序中的另一个 Activity。

那么有两种方法可以做到这一点。您可以尝试使用根据文档的隐式意图,(隐式)意图是“要执行的操作的抽象描述”,“提供在不同应用程序中的代码之间执行后期运行时绑定”。有点像尝试使用接口通过网络启动方法。您无法确定启动的对象的确切类是什么,只能处理您声明的操作和类别。

第二种方法是显式意图,这更像是通过网络进行具体调用。如果您知道包和类名,这应该可以工作。

    Intent intent = new Intent(Intent.ACTION_MAIN);
    //intent.putExtra("plain_text", "Testing");
    intent.setClassName("packagename", "packagename.ClassName"); // Explicit Intent
    try {
        startActivity(intent);
    }
    catch (Exception e)
    {
        Log.d(TAG","onCreate",e);
    }
}

您可以根据需要和尝试从何处启动使用标志添加额外信息。

日航

于 2011-04-04T19:11:31.550 回答
3

从您的应用程序启动外部活动是使用与您正在使用的方法略有不同的方法完成的。您需要使用给定的操作创建意图。例如,启动从图库中获取图像的意图如下所示:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, IMAGE_PICK);

请注意,您没有明确定义要加载的活动,而是要执行的操作类型。然后,Android 将选择(或让用户选择)已注册以处理要运行的此类意图的活动。

于 2011-04-04T18:34:09.870 回答
2

您可能需要更具体地了解您正在做什么。例如,如果您只想从主 Activity 启动另一个 Activity,则可以使用以下方法:

Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("key", "data"); //put any data you want to pass into the new activity
startActivity(intent);

然后只需确保将新活动放入清单中,如下所示:

<activity android:name=".OtherActivity"
      android:label="@string/other"/>

如果你的目标是别的东西,那么你应该明确你想做的事情。

于 2011-04-04T18:08:35.120 回答