从另一个包中启动活动

7

我有这个清单:

<manifest ...
    package="com.my">

    <application ...>

        <activity ...
            android:name=".app.Run">
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    <activity ...
    android:name=".app.Preferences"/>

    <activity ...
    android:name=".library.error.ErrorDialog"/>

    </application>

</manifest>

我该如何从Run活动开始ErrorDialog活动?

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.my.library.error", "com.my.library.error.ErrorDialog"));
startActivity(intent);

或者
Intent intent = new Intent();
intent.setComponent(new ComponentName("library.error", "library.error.ErrorDialog"));
startActivity(intent);

无法使用


我错了...我错了...

我的ErrorDialog活动不是公共的。 :D


看看这个,可能会有帮助:使用Intent启动不同包中的活动。https://dev59.com/UXE85IYBdhLWcg3wgDzd - Ahmad Kayyali
清单包名为:“com.my”。 - user1993006
4个回答

9

1. 关于应用程序清单文件

Manifest: 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  package="app.run"/> 
<activity android:name="app.run"/> 
<activity android:name="library.error.ErrorDialog"/>

package app.run  // Your Main Application Package Name

Activity:
Intent i = new Intent(); 
i.setClassName("app.run", "library.error.ErrorDialog"); //
startActivity(i); 

setClassName()

是与应用程序清单文件无关的函数。

2. 与应用程序清单文件无关

Intent intent = new Intent();
intent.setComponent(new ComponentName("packagename whos activity u want to launch","classname.java"));   
startActivity(intent); 

setComponentName()

In your Case

Intent intent=new Intent();
intent.setComponent(new ComponentName("library.error", "library.error.ErrorDialog")); 
startActivity(intent);

4
创建两个不同的应用程序(packages)后,转到第一个应用程序的清单文件并进行以下编辑:--
<activity
android:name="com.example.applicationfire.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.application2.Second"
android:label="@string/app_name" >
</activity>

在这里,只需声明你想从第一个应用程序打开的第二个应用程序中的活动即可。请注意,在此处,“com.example.application2”是另一个应用程序的包名称,“Second”是第二个包中的活动名称。

而要启动另一个应用程序中的另一个活动的意图类似于以下内容--

btnStart.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View arg0) 
        {
            // TODO Auto-generated method stub
Intent intent = new Intent("android.intent.action.MAIN");
intent.setComponent(new   ComponentName("com.example.application2","com.example.application2.Second"));
startActivity(intent);
}       });}

现在,第一个传递到意图中的参数将是您的第二个应用程序的包名,第二个参数将是要打开的活动的名称。 就是这样。 PS:运行第一个应用程序!


2

我已经解决了与Intent和setClass相关的问题。

Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.setClassName("packagewheretheactivityyouwantcallis", "packagewheretheactivityyouwantcallis.ActivityYouWantCall");
            startActivity(intent);

不要忘记在你编写的活动的清单中添加你想要调用的活动,就像这样:
<application 
....>
 <activity
        android:name="packagewheretheactivityyouwantcallis.ActivityYouWantCall">
    </activity> 
</application>

0

你可以直接使用这段代码:

Intent myIntent= new Intent(FirstActivity.this,SecondActivity.class); 
startActivity(myIntent);

一个类是在同一个包中还是在另一个包中并没有什么区别。只要确保你导入了这个类。

我在我的清单文件中使用了这段代码:

<activity
    android:name="com.mycompany.mainapplication.package1.SecondActivity"
    android:label="Simple Math Questions" >
</activity>

这段代码很有用。虽然我们确实需要考虑空间限制。 - Sanved

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