【问题标题】:Android call activity in other package doesn't work其他包中的 Android 呼叫活动不起作用
【发布时间】:2017-10-24 08:54:50
【问题描述】:

我正在尝试在另一个包中开始一项活动,我已经看到了很多关于该主题的答案,但我找到的答案似乎对我不起作用。

我如何称呼其他活动:

Intent intent = new Intent();
intent.setClassName("com.packageroot.package2", "com.packageroot.package2.MainActivity");
context.startActivity(intent); 

这里是我的清单:

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

<application
       <activity
            android:name=".package1.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity
            android:name="com.packageroot.package2.MainActivity"
            android:label="@string/title_activity_main"
            android:theme="@style/AppTheme"
            android:parentActivityName=".package1.MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".package1.MainActivity"/>

        </activity>

我仍然收到此错误:

android.content.ActivityNotFoundException:找不到显式活动类 {com.packageroot.package2/com.packageroot.package2.MainActivity};您是否在清单中声明了此活动?

我不明白的是,指示的路径是错误的,正是活动的名称......

非常感谢。

【问题讨论】:

    标签: android package start-activity


    【解决方案1】:

    您可以尝试将包添加到依赖项下的 build.gradle 文件中:

    dependencies {
        compile 'com.packageroot.package2'
    }
    

    【讨论】:

      【解决方案2】:

      改变这一行:

      intent.setClassName("com.packageroot.package2", "com.packageroot.package2.MainActivity");
      

      intent.setClassName("com.packageroot", "com.packageroot.package2.MainActivity");
      

      第一个参数是“包名”。
      http://developer.android.com/reference/android/content/Intent.html#setClassName%28java.lang.String,%20java.lang.String%29

      【讨论】:

        【解决方案3】:

        如果你的意图是通过包,这就是你应该做的。 在您的清单中

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" 
            android:exported="true">//got to declare this
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
        
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="YOUR ACTION NAME" />
                    //At least one category,use DEFAULT if you don't have one
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        

        在你的活动中

        Intent intent = new Intent();
                    intent.setAction(YOUR ACTION NAME);
                    intent.addCategory(Intent.CATEGORY_DEFAULT);
                    startActivity(intent);
        

        【讨论】:

          【解决方案4】:

          对我来说最好的解决方案是控制后退按钮

          @Override
          public void onBackPressed() {
              Intent intent = new Intent(CurrentActivity.this, SecoundActivity.class);
              startActivity(intent);
              finish();
          }
          

          【讨论】:

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