2010-04-30 35 views
13

我在包装一中有活动A,并且我想要运行一个意图,它将启动包装二中的活动B.从不同包装发起活动

我该怎么做?任何样品都会受到欢迎。

这是香港专业教育学院做了什么,以及错误我得到:

第一项活动在一个包(“MainActivity”):com.abelski.currencyclient 和第2活动(“SecondActivity”在不同势包:COM .idan.second

现在我想打电话从MainActivity到SecondActivity

香港专业教育学院的在MainActivity的清单加入这一行:

<activity android:name="com.idan.second.SecondApplicationActivity"></activity> 

现在在主要活动中我得到这个按钮,运行这行:

Intent intent = new Intent(MainActivity.this,SecondApplicationActivity.class); 

,这是RROR:

04-29 09:20:59.197: ERROR/AndroidRuntime(399): Uncaught handler: thread main exiting due to uncaught exception 
04-29 09:20:59.276: ERROR/AndroidRuntime(399): java.lang.NoClassDefFoundError: com.idan.second.SecondApplicationActivity 
04-29 09:20:59.276: ERROR/AndroidRuntime(399):  
+0

我发现“包”在这里混淆;包意思是java包或应用离子包? – Samuh 2010-04-30 03:37:25

+0

请再次检查我的问题,我编辑它。 – rayman 2010-04-30 08:24:40

回答

19

我假设通过“包”来表示应用程序。

我们: - ApplicationA与FirstActivity - ApplicationB与SecondActivity

如果在ApplicationB的AndroidManifest.xml文件,在SecondActivity的声明中,您可以添加一个Intent过滤器,例如:

<activity android:name=".SecondActivity"> 
    <intent-filter> 
    <action android:name="applicationB.intent.action.Launch" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

您可以创建一个意图从FirstActivity启动此SecondActivity:

Intent intent = new Intent("applicationB.intent.action.Launch"); 
startActivity(intent); 

这一切都说明是:

  • 当您创建与动作的意图,并称之为“startActivity”系统中的SecondActivity是否有“applicationB.intent.action.Launch”
  • 的意图行动的过滤器会发现,响应它

这个文档是在活动(如果有的话):https://developer.android.com/reference/android/content/Intent.html

+0

感谢您的帮助。 – rayman 2010-05-02 06:22:53

+0

告诉我你认为有没有办法在没有GUI的情况下启动这个应用程序?只是为了启动它的背景? – rayman 2010-05-02 07:23:15

+0

我认为你应该为此提供服务。你可以在https://developer.android.com/reference/android/app/Service.html查看文档 – rcabaco 2010-05-03 08:53:44

0

使用显式意图:

Intent intent = new Intent(context,ClassName.class); 

,其中类名是从另一个包。

有时,在这种情况下,您将不会知道类的名称,您将不得不依赖目标类通告处理的Intent。

+2

它没有工作,请再次检查我的问题,我编辑它。 – rayman 2010-04-30 08:23:30

9

我有同样的问题和解决方案是你的包名的根另一个层次。

如果您有两个包“com.first ....”和“com.second ...”,并且清单引用了“com.first”。然后你可以重构这两个包以重用第一部分。例如,“com.package。。第一”和‘com.package.second’那您的清单也必须被更新

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.package"> 
... 

    <activity android:name=".first.FirstPackageActivity" android:label="FirstPackageActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".second.SecondPackageActivity" android:label="SecondPackageActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

你的Java代码可以创建一个意向,并开始以通常的方式活动:

Intent intent = new Intent(this,ActivityClassName.class); 
startActivity(intent);