找不到明确的活动类。您是不是在 AndroidManifest.xml 中声明了此活动
Posted
技术标签:
【中文标题】找不到明确的活动类。您是不是在 AndroidManifest.xml 中声明了此活动【英文标题】:Unable to find explicit activity class. Have you declared this activity in your AndroidManifest.xml找不到明确的活动类。您是否在 AndroidManifest.xml 中声明了此活动 【发布时间】:2016-09-14 13:38:29 【问题描述】:我正在尝试在我的应用中实现 PreferenceActivity,遵循this question 中接受的答案
我得到了上述异常
android.content.ActivityNotFoundException: Unable to find explicit activity class com.iphonik.chameleon/com.iphonik.AppPreferenceActivity; have you declared this activity in your AndroidManifest.xml?
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.iphonik.chameleon">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.NoTitleBar">
<activity android:name=".MainMenu">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Movies" />
<activity android:name=".SettingsActivity" />
<activity android:name=".InfoActivity" />
<receiver
android:name=".AppBroadcastReciever"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity android:name=".Info2Activity" />
<activity android:name=".ItemDetailActivity" />
<activity android:name=".TVActivity" />
<activity android:name="com.iphonik.chameleon.AppPreferenceActivity"
android:label="Preferences">
</activity>
</application>
</manifest>
活动启动代码
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch(item.getItemId())
case R.id.preferences:
Intent intent = new Intent();
intent.setClassName(this, "com.iphonik.AppPreferenceActivity");
startActivity(intent);
return true;
return super.onOptionsItemSelected(item);
【问题讨论】:
只需将com.iphonik.chameleon.AppPreferenceActivity
更改为com.iphonik.AppPreferenceActivity
【参考方案1】:
像这样声明你的活动:
<activity
android:name=".AppPreferenceActivity"
android:label="Preferences" >
<intent-filter>
<action android:name="com.iphonik.chameleon.AppPreferenceActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
并使用它:
Intent i = new Intent("com.iphonik.chameleon.AppPreferenceActivity");
【讨论】:
运行应用程序时出错。默认活动未找到。因此,它对我不起作用!【参考方案2】:从你的清单
<activity android:name="com.iphonik.chameleon.AppPreferenceActivity"
android:label="Preferences">
</activity>
删除com.iphonik.chameleon
这个
看起来像
<activity android:name=".AppPreferenceActivity"
android:label="Preferences">
</activity>
【讨论】:
【参考方案3】:改变这一行
<activity android:name="com.iphonik.chameleon.AppPreferenceActivity"
android:label="Preferences">
</activity>
到
<activity android:name="com.iphonik.AppPreferenceActivity"
android:label="Preferences">
</activity>
在清单中
【讨论】:
不是清单,而是活动启动代码。它应该更改为 intent.setClassName(this, "com.iphonik.chameleon.AppPreferenceActivity");【参考方案4】:改变
<activity android:name="com.iphonik.chameleon.AppPreferenceActivity"
android:label="Preferences">
到
<activity android:name="com.iphonik.AppPreferenceActivity"
android:label="Preferences">
【讨论】:
【参考方案5】:您必须检查该路径是否存在于您的类路径中。 com.iphonik.chameleon.AppPreferenceActivity。
【讨论】:
【参考方案6】:改变这个
<activity android:name="com.iphonik.chameleon.AppPreferenceActivity"
android:label="Preferences">
到
<activity android:name=".AppPreferenceActivity"
android:label="Preferences">
【讨论】:
【参考方案7】:使用下面的代码
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.iphonik.chameleon">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.NoTitleBar">
<activity android:name=".MainMenu">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Movies" />
<activity android:name=".SettingsActivity" />
<activity android:name=".InfoActivity" />
<receiver
android:name=".AppBroadcastReciever"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity android:name=".Info2Activity" />
<activity android:name=".ItemDetailActivity" />
<activity android:name=".TVActivity" />
<activity android:name=".AppPreferenceActivity"
android:label="Preferences">
</activity>
</application>
</manifest>
活动启动代码
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch(item.getItemId())
case R.id.preferences:
Intent intent = new Intent(currentActivityName.this, AppPreferenceActivity.class);
startActivity(intent);
return true;
return super.onOptionsItemSelected(item);
【讨论】:
【参考方案8】:使用正确的包名和活动名应该以点(.)开头
示例:
<manifest package="your.package.name">
<application>
<activity android:name=".ActivityName"/>
//if you have sub packages
<activity android:name=".subPackage.ActivityName"/>
</application>
</manifest>
【讨论】:
【参考方案9】:我知道这是一个非常古老的问题,但我找到了解决方案。就我而言,由于活动不匹配而出错。我导入了一个活动,但它与 AndroidManifest.xml 中的活动不匹配。我创建了两个同名的活动(名称: LikesActivity )但在两个不同的地方(第二个在文件夹“喜欢”中)。我正在将活动导入为“import your_package_name.LikesActivity”。请参阅下面的许可。
<activity android:name=".Home.HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".Likes.LikesActivity" /> // See this line
查看我的导入声明
import your_package_name.LikesActivity;
.............
.............
Intent intent4 = new Intent(context, LikesActivity.class);
context.startActivity(intent4);
我将导入语句更改为“导入 your_package_name.Likes.LikesActivity”。我做了什么?我在黑白中注入了“喜欢”文件夹。现在它与 AndroidManifest.xml 匹配。
【讨论】:
【参考方案10】:从手机中删除该应用并重新安装会有所帮助。
【讨论】:
以上是关于找不到明确的活动类。您是不是在 AndroidManifest.xml 中声明了此活动的主要内容,如果未能解决你的问题,请参考以下文章
android billing inApp/subscription 找不到明确的活动 ProxyBillingActivity