如何在另一个项目中调用一个活动?

5

你好,我是一个新手,正在学习安卓开发并且已经创建了两个项目。

现在,我希望在第一个项目中点击一个按钮后可以调用第二个项目中的活动。

第一个项目仅处理登录界面,当我点击登录按钮时,需要调用第二个项目中存在的一个活动。

我在网上搜索了一下,但没有找到任何我理解得很好的教程。

你好,我遇到了以下错误。

01-30 08:36:47.230: E/dalvikvm(3408): Could not find class 'com.androidhive.googleplacesandmaps.MainActivity', referenced from method org.fluturasymphony.recommendation.LoginActivity$DownloadWebPageTask.doInBackground
01-30 08:36:52.587: E/AndroidRuntime(3408): FATAL EXCEPTION: AsyncTask #1
01-30 08:36:52.587: E/AndroidRuntime(3408): java.lang.RuntimeException: An error occured while executing doInBackground()
01-30 08:36:52.587: E/AndroidRuntime(3408):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at java.lang.Thread.run(Thread.java:856)
01-30 08:36:52.587: E/AndroidRuntime(3408): Caused by: java.lang.NoClassDefFoundError: com.androidhive.googleplacesandmaps.MainActivity
01-30 08:36:52.587: E/AndroidRuntime(3408):     at org.fluturasymphony.recommendation.LoginActivity$DownloadWebPageTask.doInBackground(LoginActivity.java:69)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at org.fluturasymphony.recommendation.LoginActivity$DownloadWebPageTask.doInBackground(LoginActivity.java:1)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-30 08:36:52.587: E/AndroidRuntime(3408):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-30 08:36:52.587: E/AndroidRuntime(3408):     ... 3 more

我已将清单声明为以下内容。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.fluturasymphony.recommendation"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="9"
              android:targetSdkVersion="11" />
    <uses-permission android:name="android.permission.INTERNET" />    
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
        <activity android:label="@string/app_name" android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name="org.achartengine.GraphicalActivity" />
        <activity android:name=".CategoryWiseSalesChartActivity" />
        <activity android:name=".ProductWiseSalesChartActivity" />
        <activity android:name="com.androidhive.googleplacesandmaps.MainActivity"/>
        <activity android:label="@string/home_screen" android:name=".HomeActivity" android:configChanges="orientation">            
        </activity>
        <activity android:label="@string/store_screen" android:name=".StoreActivity" android:configChanges="orientation">            
        </activity>
        <activity android:label="@string/store_list_screen" android:name=".StoreListActivity" android:configChanges="orientation">            
        </activity>
        <activity android:label="@string/location_screen" android:name=".StoreMapActivity" android:configChanges="orientation">            
        </activity>
        <activity android:label="@string/recommended_products_list_screen" android:name=".RecommendedProductsListActivity" android:configChanges="orientation">            
        </activity>
        <activity android:label="@string/category_wise_sales_screen" android:name=".CategoryWiseSalesActivity" android:configChanges="orientation">            
        </activity>
        <activity android:label="@string/product_wise_sales_screen" android:name=".ProductWiseSalesActivity" android:configChanges="orientation">            
        </activity>
                <uses-library android:name="com.google.android.maps" />


    </application>



</manifest>

我正在第二个类中这样调用活动。
Intent loginintent = new Intent("com.androidhive.googleplacesandmaps.MainActivity");
                        startActivity(loginintent);

这个对吗?


熟悉“远程服务过程”概念。 - Pinki
感谢所有帮助我的人,给你们点个赞... - user1929242
5个回答

3

根据Android文档,您可以通过将项目制作为库文件,在清单文件中定义它,然后以任何方式调用它来处理此问题。

针对我的需求,我按照以下步骤进行了操作: 在Manifest中定义您想要在按钮点击时调用的Activity,并使用其完整包名,当您在按钮点击时调用它时,新项目的Activity将会触发。 示例如下,在您的第一个项目的manifest文件中定义类似于以下内容的代码:

<activity 
        android:name="packagefull.activityname"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

    </activity>

在包名中定义要调用的活动的完整路径,然后在包名后面给出活动的名称。希望这对你有用,因为这对我非常有效。

谢谢,我会查看并回复你。你还有什么其他资源可以解释这个吗? - user1929242
我也做了同样的事情,但是出现了“未找到活动”异常。请问你知道原因吗? - Priyankara
有人能告诉我这个方法现在是否有效吗?我已经尝试了几个小时,但仍然没有希望。谢谢。 - Priyankara
对于那些遇到困难的人,请确保阅读并实施答案中的“库链接”。 - AhabLives
为了找到这个解决方案,我努力了很多。我怎样才能投多票? - Muneeb Mirza

2
请使用以下内容:
Intent i = new Intent(Intent.ACTION_MAIN);
i.setComponent(new ComponentName("app package name", "app launch activity's classname"));
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

1
这真的不是一个开发任何应用程序的好方法。但如果你仍想实现这一点,你将需要在该应用程序的清单文件中为目标活动声明一个意图过滤器,然后从你的登录活动中使用它作为隐式意图。
在项目A的清单文件中:
<activity android:name="com.example.android.TargetActivity">
             <intent-filter>
                <action android:name="com.someone.wants.to.call.me"></action>
            </intent-filter>
</activity>

在项目B的活动中:
Intent intent = new Intent("com.someone.wants.to.call.me");
         startActivity(intent);

0
  1. 在地图项目的AndroidManifest文件中添加自定义意图过滤器

     <!-- 添加自定义操作 -->
     <activity android:name="MapActivity"
                android:label="@string/mapLabel"
            >
                <intent-filter>
                    <action android:name="com.example.map.show" />
                </intent-filter>
            </activity>
    
  2. 从登录按钮调用此活动,如下所示:

Intent intent = new Intent("com.example.map.show"); startActivity(intent);

意图 intent = 新意图("com.example.map.show"); 开始活动(intent);


-1
你应该为每个应用程序使用一个项目。如果你想将登录与应用程序的其余部分分开,可以使用不同的包。除非我误解了你所说的“项目”是什么意思?

我有登录代码在一个独立的项目中,地图显示代码在另一个独立的项目中。当我点击登录按钮时,它应该跳转到第二个项目并显示地图。当用户点击按钮后,它应该返回到主项目,在那里我编写了登录屏幕的代码,并需要显示其余功能。 - user1929242
你能给出将它们放在不同项目中的理由吗?从我的理解来看,你好像有一个用于登录的活动和一个用于地图显示的活动... 如果是这样的话,除非你的登录和地图显示过于复杂,否则你不应该需要2个项目。 - knennigtri
第一个项目中的类数量较多,我不想再添加这个了。现在看起来有点混乱,难以跟踪事物,所以我有两个项目。 - user1929242

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