【问题标题】:How to call an activity in another project?如何调用另一个项目中的活动?
【发布时间】:2013-01-30 04:59:54
【问题描述】:

您好,我是 android 新手,我创建了 2 个项目。

现在我想通过单击按钮从第一个项目中调用第二个项目中的活动。

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

我在网上搜索,但没有找到任何我理解正确的教程。

您好,我发现以下错误。

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

这样对吗??

【问题讨论】:

  • 通过“远程服务流程”概念。
  • +1 给所有帮助过我的人...

标签: android android-activity


【解决方案1】:

根据Android,您可以通过创建项目Library 来处理这个问题,然后在清单文件中定义它并以您想要的任何方式调用它

为了解释,我按照我的要求做了这个 您要在按钮上调用的活动单击在清单中使用其完整包名称定义它,然后当您在按钮上调用它时单击新项目的活动将触发 执行此操作的示例如下 在您的第一个项目的manifest 文件中定义类似这样的内容

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

    </activity>

在包名中定义您要调用的活动的完整路径,并在包名之后给出活动的名称 希望这对你有用,因为这对我来说很完美

【讨论】:

  • 谢谢您检查并回复您。你有更多的资源来解释这个吗?
  • 我也做了同样的事情,但得到了 No Activity Found 异常。请问你知道原因吗?
  • 谁能告诉我这个方法现在有效吗?我尝试了几个小时,仍然没有希望。谢谢
  • 对于任何苦苦挣扎的人......请务必阅读并实施答案中的“图书馆”链接。
  • 费了很大劲才找到这个解决方案。我怎样才能投票不止一个?
【解决方案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);

【讨论】:

    【解决方案3】:

    这确实不是开发任何应用程序的好方法。但是,如果您想实现这一点,则必须在该应用程序的 Manifest 文件中为目标活动声明 Intent Filter,并将其用作登录活动的隐含意图。

    在项目 A 的清单内:

    <activity android:name="com.example.android.TargetActivity">
                 <intent-filter>
                    <action android:name="com.someone.wants.to.call.me"></action>
                </intent-filter>
    </activity>
    

    在项目 B 的 Activity 内部:

    Intent intent = new Intent("com.someone.wants.to.call.me");
             startActivity(intent);
    

    【讨论】:

      【解决方案4】:
      1. 在地图项目的 AndroidManifest 文件中添加您的自定义意图过滤器

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 我在单独的项目中有登录代码,在单独的项目中有地图显示的代码,当我点击登录按钮时,它应该转到第二个项目并显示地图,然后显示当用户单击一个按钮时,它应该返回到我为登录屏幕编写代码的主项目,并且它需要显示其余功能。
        • 你能给出将它们放在不同项目中的理由吗?据我了解,您似乎有一项登录活动和一项地图显示活动...如果是这样,除非您的登录名和地图显示过于复杂,否则您不应该需要 2 个项目?
        • 嗯,第一个项目中的类数量更多,我现在也不想添加它,只是它看起来有点聚集,而且很难跟踪事情,所以我有2 个项目。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-08
        相关资源
        最近更新 更多