No se puede instanciar el receptor en BroadcastReceiver SMS
¿Por qué tengo este error:
ERROR/AndroidRuntime(854): Uncaught handler: thread main exiting due to uncaught exception ERROR/AndroidRuntime(854): java.lang.RuntimeException: Unable to instantiate receiver com.android.GPS21.SmsReceiver: java.lang.ClassNotFoundException: com.android.GPS21.SmsReceiver in loader dalvik.system.PathClassLoader@43d02ef0 ERROR/AndroidRuntime(854): Caused by: java.lang.ClassNotFoundException: com.android.GPS21.SmsReceiver in loader dalvik.system.PathClassLoader@43d02ef0
Este es mi evento onReceive:
- SMS recibidos en mi aplicación de SMS y en Hangouts, aunque llamo a abortBroadcast ()
- ¿Podemos borrar un SMS en Android antes de que llegue a la bandeja de entrada?
- Android: documentación para el contenido: // sms / "type" values?
- Abortar / Cancelar transmisiones
- ¿Cómo enviar sms al apagar el teléfono en android?
public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i(LOG_TAG, "Recieved a message"); if (intent.getAction().equals(ACTION)) { // if(message starts with SMStretcher recognize BYTE) StringBuilder sb = new StringBuilder(); // The SMS-Messages are 'hiding' within the extras of the Intent. Bundle bundle = intent.getExtras(); if (bundle != null) { // Get all messages contained in the Intent // Telephony.Sms.Intents.getMessagesFromIntent(intent) does not // work anymore hence the below changes Object[] pduObj = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pduObj.length]; for (int i = 0; i < pduObj.length; i++) messages[i] = SmsMessage.createFromPdu((byte[]) pduObj[i]); // Feed the StringBuilder with all Messages found. for (SmsMessage currentMessage : messages) { sb.append("SMS Received From: "); // Sender-Number sb.append(currentMessage.getDisplayOriginatingAddress()); sb.append("\nMessage : "); // Actual Message-Content sb.append(currentMessage.getDisplayMessageBody()); } } // Logger Debug-Output Log.i(LOG_TAG, "[SMSApp] onReceive: " + sb); // Show the Notification containing the Message. Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); }
En depurar que onReceive () es error.
Acabo de hacer BroadcastReceiver para recibir SMS y mostrar en la notificación Toast ..
Y trato de enviar SMS de DDMS y ese error aparece ..
- Bloquear SMS salientes por contentObserver
- Android: recibe SMS largos (multipart)
- El envío de SMS mediante Intent no incluye destinatarios en algunos dispositivos
- Registrar BroadcastReceiver para SMS entrantes
- SMS no recibidos ... sólo en ciertos casos ... Carrier / Country?
- BroadcastReceiver para SMS de varias partes
- Cómo enviar caracteres no impresos a través de SMS
- Detección de SMS entrantes y salientes
Su manifiesto afirma que tiene una clase llamada com.android.GPS21.SmsReceiver
, y Android no puede encontrarla.
Esta es una vieja pregunta y no estoy seguro de que este fue tu problema, pero acabo de tener este problema. Dentro de Eclipse, he creado la carpeta (realmente un paquete ) en el lugar equivocado. Por ejemplo
Incorrecto
La razón de esto es incorrecta es que la carpeta de difusión / paquete no está dentro del espacio de nombres como esperaba. Esto sucede si hace clic derecho en My Program / src y crea el paquete allí. Tenga en cuenta que es My Program / src / Broadcast, que es lo que está mal.
La razón es que la clase SmsReceiver no está en su espacio de nombres. En este caso usted puede tener algo como esto en su manifiesto.
<receiver android:name=".Broadcast.SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
Cuando se desencadena, la clase SmsReceiver no se encuentra y obtendrá el error.
Correcto
La forma correcta de hacerlo, y obtener el paquete en el espacio de nombres adecuado es hacer clic derecho en com.example.my.program y crearlo en su lugar. Observe que es My Program / src / com.example.my.program.Broadcast que ahora está correctamente en el mismo espacio de nombres.
Esto se encontrará en la aplicación con el mismo código de manifiesto anterior.
Su clase broadcastReceiver debe ser una clase pública por ejemplo
Public class ReceptorLlamadas extiende BroadcastReceiver
Usted tiene que escribir la ruta completa a su broadcastReceiver, quiero decir, si en su archivo de manifiesto jave package = "com.myapp", pero su MySmsBroadcast.java no es exactamente en el paquete myapp (está en myapp.smsStuff.MySmsBroadcast, para Ejemplo), en el
Tuve el mismo problema también. En mi caso, mi dispositivo virtual estaba dañado.
Intenta crear uno nuevo y ejecutarlo. Trabajó para mí!
Puede escribir el receptor como "estático". En el programa my.sample, debe escribir receptor "static SimpleSmsReceiver
Tengo el mismo error. Después de modificar el "AndroidManifest.xml" de esta manera, se resuelve el error.
receiver android:name=".SimpleSmsReceiver"
->
receiver android:name=".SimpleSMSReceiver"
El error fue así.
... 01-13 10:23:10.787: ERROR/AndroidRuntime(378): java.lang.RuntimeException: Unable to instantiate receiver my.sample.SimpleSmsReceiver: java.lang.ClassNotFoundException: my.sample.SimpleSmsReceiver in loader dalvik.system.PathClassLoader[/data/app/my.sample-2.apk] 01-13 10:23:10.787: ERROR/AndroidRuntime(378): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2789) 01-13 10:23:10.787: ERROR/AndroidRuntime(378): at android.app.ActivityThread.access$3200(ActivityThread.java:125) 01-13 10:23:10.787: ERROR/AndroidRuntime(378): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
Asegúrese de tener un constructor público sin parámetros. Por ejemplo, tengo mi propia implementación BroadcastReceiver que recibe algunas propiedades en el constructor. Después de agregar un constructor público predeterminado (sin parámetros), funciona perfectamente.
- Error de generación después de migrar de Crashlytics SDK a Tela
- El enfoque de la solicitud de edición de texto no funciona