从另一个包启动活动

时间:2013-01-20 10:32:10

标签: android android-intent android-activity packages

我有这个清单:

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

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

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

不工作


MEA CULPA ...... MEA CULPA ......

我的ErrorDialog活动未公开。 :d

4 个答案:

答案 0 :(得分:8)

<强> 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。与Application Manifest File无关

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

setComponentName()

在您的案例中

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

答案 1 :(得分:3)

创建两个不同的应用程序(包)之后。转到第一个应用程序的清单文件,然后按如下所示进行编辑: -

<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 :(得分:0)

我用Intent和setClass

解决了这个问题
Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.setClassName("packagewheretheactivityyouwantcallis", "packagewheretheactivityyouwantcallis.ActivityYouWantCall");
            startActivity(intent);

不要忘记将您要编写的活动的活动列入您的活动清单:

<application 
....>
 <activity
        android:name="packagewheretheactivityyouwantcallis.ActivityYouWantCall">
    </activity> 
</application>

答案 3 :(得分:-1)

您可以使用此代码:

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

如果一个类在另一个包的同一个包中,它不会产生任何不同。请确保导入Class。

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

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