2012-03-07 29 views
8

Recibí un error en mi aplicación de Android cuando intenta crear una instancia de un receptor que uso para iniciar un servicio en el arranque. El error es obvio, no puede encontrar el archivo de clase de mi receptor. Pero todo está bien con mi archivo de manifiesto, los paquetes y todo y no tengo ni idea de lo que está sucediendo. Aquí está mi código:No se pudo crear una instancia del receptor java.lang.ClassNotFoundException

package dti.obd.reader; 

import dti.obd.reader.service.MainService; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class BootReceiver extends BroadcastReceiver 
{ 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      Intent serviceIntent = new Intent(MainService.class.getName()); 
      context.startService(serviceIntent); 
     } 
} 

Y mi archivo de manifiesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="dti.obd.reader" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 


    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <service android:name=".service.MainService" > 
      <intent-filter > 
       <action android:name="dti.obd.reader.service.MainService" /> 
      </intent-filter> 
     </service> 

     <receiver android:name="dti.obd.reader.BootReceiver" > 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED" > 
       </action> 
      </intent-filter> 
     </receiver> 
    </application> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

</manifest> 

¿Alguien conoce el erro? Parece que el paquete y los nombres son todos bien ...

Respuesta

16

Usted tiene que poner su Reciever en algunos package. El sistema no podrá instanciar si está en el paquete principal.

Tuve el mismo problema. Afortunadamente, antes de buscar el error en Internet, estaba haciendo otro proyecto de Java. Me di cuenta de que el error allí era similar a este. Lo intenté hace un momento y funcionó. :)

+0

¡gracias! funcionó bien, esta respuesta debería ser aceptada! +1 para usted –

+7

¿Puede explicarlo un poco más? – levi

1

intento:

<receiver android:name=".BootReceiver" > 

se añade el nombre del paquete en sí, ya que ha definido:

package="dti.obd.reader" 
+0

ya he intentado de esta manera. Por eso cambié para volver a especificar el paquete ... pero ninguno funciona. ¡Gracias por tu ayuda! –

+1

Debe especificar el paquete 'AND' write' receiver 'línea de esta manera. ¿Ustedes dos al mismo tiempo? También eche un vistazo a http://www.coderanch.com/t/439875/Android/Mobile/make-your-application-run- como quizás pueda ver algo diferente. (Es poco probable que esto haga la diferencia), pero coloque la línea 'user-permission' sobre la línea' application'. – Caner

+0

Intenté todo, pero nada funciona. Me estoy volviendo loco por este error. Creo que es algo con el nombre del paquete, alguna restricción que no sé ... –

1

También me he enfrentado a este problema. Agregar el nombre completo del paquete a la definición del receptor en el archivo de manifiesto no ayudó. El problema fue que había un archivo Odex antiguo correspondiente a mi archivo apk. El sistema Android carga clases desde el archivo odex por lo que no puede encontrar la clase de receptor.

Soluciones:

  • eliminar el archivo odex de edad, o
  • dar un nuevo nombre a su apk

http://www.addictivetips.com/mobile/what-is-odex-and-deodex-in-android-complete-guide/

+1

Me enfrenté al mismo problema. En la versión anterior, uso un nombre de receptor A, en la versión actual, lo eliminé y obtuve este error – Jonguo

+0

Tenemos esta excepción en nuestra aplicación en línea. Y resulta que estas soluciones pueden ser una solución alternativa. – Cobain

0

usted tiene que poner su Reciever en algún paquete En su lugar, agregue la ruta completa de Recieve r

<receiver android:name="com.yourpackage.BootReceiver" > 

Se Suena weired pero en mi caso se ha resuelto el problema

Esperanza Alguien estará fructífera con esta experiencia

Cuestiones relacionadas