【问题标题】:Android error "unable to find explicit activity class"Android 错误“无法找到明确的活动类”
【发布时间】:2011-11-12 21:47:48
【问题描述】:

我有一个包含多个包的 android 项目。在这种情况下,包的结构是 com.WAPP.SetLocation 是包含我要运行的活动的包。

在我的清单中,com.WAPP 被视为基础包:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.WAPP"
      android:versionCode="1"
      android:versionName="1.0">

我的活动在我的清单中声明为:

<activity android:name=".mainScreenActivity"></activity>
<activity android:name=".SetLocation.setLocationActivity"></activity>

mainScreen 活动显示正常,因为它位于 com.WAPP 包中。但是当我尝试运行 setLocationActivity 时,我得到了无法找到明确的类错误。以下是我的意图参数:

Intent i = new Intent();
            i.setClassName("com.WAPP.SetLocation",
                           "com.WAPP.SetLocation.setLocationActivity");
            startActivity(i);

【问题讨论】:

    标签: android android-activity android-manifest


    【解决方案1】:

    第一个参数是应用包而不是activity所在的包。

    你可以像这样调用Activity。

    Intent i = new Intent();
    i.setClassName("com.WAPP",
                   "com.WAPP.SetLocation.setLocationActivity");
    startActivity(i);
    

    SYLARRR 建议让 Android 自动为您解决这个问题,这是首选。因此调用 as..

    startActivity(new Intent(this, setLocationActivity.class));
    

    根据 Java 标准,建议包名全部小写,类名为 CamelCased。

    【讨论】:

      【解决方案2】:

      如果新活动与 MainActivity 不在同一个数据包中(你从这里调用?),请尝试在清单上声明

      <activity android:name="com.WAPP.SetLocation.setLocationActivity"></activity>
      

      在调用者中

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

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        除了上述答案之外,请确保您的活动在清单中的应用程序内声明

        <application
            android:allowBackup="true"
            android:label="@string/app_name"
            android:supportsRtl="true">
        
            <activity android:name=".mainScreenActivity"></activity>
            <activity android:name=".SetLocation.setLocationActivity"></activity>
        
        </application>
        

        【讨论】:

        • 这就是我遇到的问题。正在做一个黑客马拉松并复制了很多文件,所以 Android Studio 从来没有机会接受新活动。
        【解决方案4】:

        如果我没记错的话,i.setClassName("com.WAPP.SetLocation","com.WAPP.SetLocation.setLocationActivity"); 应该是 i.setClassName(getBaseContext(),"setLocationActivity"); Reference

        也试试这个语法:

        startActivity(new Intent(MyActivity.this, setLocationActivity.class));
        

        并尝试从以下位置删除起始点:

        <activity android:name=".SetLocation.setLocationActivity"></activity>
        

        【讨论】:

          【解决方案5】:

          这样做:

          Intent intent = new Intent();
          intent.setComponent(
                  new ComponentName("com.WAPP", "com.WAPP.SetLocation.setLocationActivity"));
          startActivity(i);
          

          【讨论】:

            【解决方案6】:

            在 Xamarin Android 中,确保您的 Activity 类具有 Activity 属性

            [Activity(Theme = "@style/MyTheme")]
            public class MyActivity : ActivityBase
            {
            ...
            }
            

            这样您就可以确保您的活动已在 AndroidManifest.xml 中注册

            【讨论】:

              【解决方案7】:

              我在项目中遇到了同样的问题。这几乎浪费了我一整天。我尝试了上面提到的所有解决方案,但没有一个解决方案对我有用。 经过所有艰苦的工作,我只是“重建”了项目并“清理”了项目,它运行良好。 笔记: 在完成所有过程之前,您只需要尝试这些选项。

              【讨论】:

                【解决方案8】:

                首先,确保您创建的是活动而不是类。而且,如果是活动,则转到 ma​​nifest.xml 文件并查看该特定文件的 path

                这对我来说非常有效!

                https://forums.xamarin.com/discussion/104102/android-content-activitynotfoundexception-unable-to-find-explicit-activity-class

                仅供参考

                【讨论】:

                  【解决方案9】:

                  您应该将广告归类到 manifest.xml 例如manifest.xml 在这个例子中,我添加了SecondActivity.class

                  <?xml version="1.0" encoding="utf-8"?>
                  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                      package="com.example.myapplication">
                  
                      <application
                          android:allowBackup="true"
                          android:icon="@mipmap/ic_launcher"
                          android:label="@string/app_name"
                          android:roundIcon="@mipmap/ic_launcher_round"
                          android:supportsRtl="true"
                          android:theme="@style/Theme.MyApplication">
                          <activity
                              android:name=".MainActivity"
                              android:exported="true">
                              <intent-filter>
                                  <action android:name="android.intent.action.MAIN" />
                                  <category android:name="android.intent.category.LAUNCHER" />
                              </intent-filter>
                          </activity>
                          <activity
                              android:name=".SecondActivity"
                              android:exported="true">
                              <intent-filter>
                                  <action android:name="android.intent.action.MAIN" />
                  
                                  <category android:name="android.intent.category.LAUNCHER" />
                              </intent-filter>
                          </activity>
                      </application>
                  
                  </manifest>
                  

                  【讨论】:

                    【解决方案10】:

                    在您的清单中,您将其声明为 .SetLocation.setLocationActivity 但 包名是 com.WAPP.SetLocation 所以你需要再次添加前缀。

                    Intent i = new Intent();
                                i.setClassName("com.WAPP.SetLocation",
                                               "com.WAPP.SetLocation.SetLocation.setLocationActivity");
                                startActivity(i);
                    

                    【讨论】:

                      【解决方案11】:

                      这可能是由于未在清单中注册您的下一个活动 XML 文件。在 AndroidManifest.xml 文件中注册您的下一个活动 XML 文件

                      &lt;activity android:name=".NextActivity" /&gt;

                      希望对你有帮助。

                      【讨论】:

                        【解决方案12】:

                        如果使用 ImageView 可能会有问题:(

                        Intent intent = new Intent(context,ImageView.class);
                                                intent.putExtra("imageurl",clients_document_return.getUrl());
                                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        
                                                v.getContext().startActivity(intent);
                        

                        你的班级名称可能是我 Imageview.class 所以首先检查类名中的所有小写字母

                        谢谢:)

                        【讨论】:

                          猜你喜欢
                          • 2015-05-15
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多