2015-01-29 4 views
4

Я пытаюсь разархивировать некоторые файлы в фоновом режиме, поэтому я использую IntentService, как в учебнике Google. Мой класс обслуживания объявлен в AndroidManifest так:Невозможно найти явный класс активности {}; объявили ли вы эту активность в вашем AndroidManifest.xml

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

Он должен показать тост только для тестирования , но я всегда получаю сообщение об ошибке:

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 [email protected] 
      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). Похоже трактов это нормально, но появляется проблема, и у меня нет больше идей ...

+0

вы сделали то, что говорит ошибка, и добавьте это в свой манифест? – tyczj

+0

'UnZipService' - услуга, а не деятельность. запустите его как услугу. Пожалуйста, см. Мой ответ – Rohit5k2

ответ

13

Вы начинаете службу как деятельность

Смените

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 
+1

Бог ... Потратьте так много времени на эту опечатку! Большое спасибо! – tonyAndr

+2

Безумие !!! спасибо – Roon13

Смежные вопросы