找不到明确的活动类 ;您是不是在 AndroidManifest.xml 中声明了此活动
Posted
技术标签:
【中文标题】找不到明确的活动类 ;您是不是在 AndroidManifest.xml 中声明了此活动【英文标题】:Unable to find explicit activity class ; have you declared this activity in your AndroidManifest.xml找不到明确的活动类 ;您是否在 AndroidManifest.xml 中声明了此活动 【发布时间】:2015-03-29 06:57:30 【问题描述】:我正在尝试在后台解压缩一些文件,所以我使用 IntentService 就像在谷歌的教程中一样。我在 androidManifest 中声明的服务类是这样的:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.osmdroid">
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" />
<application
android:configChanges="orientation|screenSize|keyboardHidden"
android:hardwareAccelerated="true"
android:icon="@drawable/ecn_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MapActivity"
android:icon="@drawable/ecn_icon"
android:label="test" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings">
</activity>
<service
android:name=".UnZipService"
android:exported="false"/>
</application>
在活动中,我有
IntentFilter intentFilter = new IntentFilter(DownloadManager
.ACTION_DOWNLOAD_COMPLETE);
receiverDownloadComplete = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
long reference = intent.getLongExtra(DownloadManager
.EXTRA_DOWNLOAD_ID, -1);
if (myDownloadReference == reference)
...
switch (status)
case DownloadManager.STATUS_SUCCESSFUL:
Intent mServiceIntent = new Intent(context, UnZipService.class);
mServiceIntent.setData(Uri.parse(savedFilePath));
startActivity(mServiceIntent);
break;
...
cursor.close();
;
registerReceiver(receiverDownloadComplete, intentFilter);
这里的服务:
public class UnZipService extends IntentService
public UnZipService()
super("UnZipService");
@Override
protected void onHandleIntent(Intent workIntent)
String dataString = workIntent.getDataString();
Log.v("IntentURI", dataString);
Toast.makeText(this, "Installing....", Toast.LENGTH_SHORT).show();
它应该显示 toast 只是为了测试,但我总是得到一个错误:
01-29 19:08:25.740 15521-15521/org.osmdroid E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Error receiving broadcast Intent act=android.intent.action.DOWNLOAD_COMPLETE flg=0x10 pkg=org.osmdroid (has extras) in org.osmdroid.SettingsActivity$1@21292650
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5147)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class org.osmdroid/org.osmdroid.UnZipService; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1618)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
at android.app.Activity.startActivityForResult(Activity.java:3404)
at android.app.Activity.startActivityForResult(Activity.java:3365)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817)
at android.app.Activity.startActivity(Activity.java:3600)
at android.app.Activity.startActivity(Activity.java:3568)
at org.osmdroid.SettingsActivity$1.onReceive(SettingsActivity.java:148)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:758)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5147)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
(类和活动)都在同一个文件夹(org.osmdroid)中。似乎路径还可以,但问题出现了,我没有更多的想法......
【问题讨论】:
您是否按照错误提示进行操作并将其添加到您的清单中?UnZipService
是一项服务而不是一项活动。将其作为服务启动。请看我的回答
【参考方案1】:
您正在将服务作为一项活动启动
改变
Intent mServiceIntent = new Intent(context, UnZipService.class);
mServiceIntent.setData(Uri.parse(savedFilePath));
startActivity(mServiceIntent);
到
Intent mServiceIntent = new Intent(context, UnZipService.class);
mServiceIntent.setData(Uri.parse(savedFilePath));
startService(mServiceIntent); // Only this line is changed
【讨论】:
上帝...花这么多时间因为这个错字!非常感谢!【参考方案2】:请在您的 AndroidManifest.xml 中声明此活动
【讨论】:
以上是关于找不到明确的活动类 ;您是不是在 AndroidManifest.xml 中声明了此活动的主要内容,如果未能解决你的问题,请参考以下文章
android billing inApp/subscription 找不到明确的活动 ProxyBillingActivity