fadli wdt
fadli wdt

Reputation: 101

Unable to instantiate receiver in BroadcastReceiver SMS

Why I have this 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

This is my onReceive events:

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

In debug that onReceive() is error.

I just make BroadcastReceiver to receive SMS and show in notification Toast..

And I try send SMS from DDMS and that error appear..

Upvotes: 10

Views: 26454

Answers (9)

Naveen Kumar
Naveen Kumar

Reputation: 31

Provide fully qualified class name, That worked for me

Like this : *

<receiver android:name="com.zolipe.communitycensus.util.CensusReceiver">
     <intent-filter>
          <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
          <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
     </intent-filter>
</receiver>

*

Upvotes: 1

red_neo
red_neo

Reputation: 41

Your broadcastReceiver class must be a public class by example

public class ReceptorLlamadas extends BroadcastReceiver

Upvotes: 4

user1421543
user1421543

Reputation:

Make sure you have a public constructor without parameters. For example I have my own BroadcastReceiver implementation that receives some properties on the constructor. After I added a public default (without parameters) constructor, it works perfectly.

Upvotes: 0

Kirk
Kirk

Reputation: 16255

This is an old question and I'm not sure that this was your trouble, but I just had this issue. Within Eclipse, I created the folder (really a package) in the wrong place. For example

Incorrect

enter image description here

The reason this is incorrect is that the Broadcast folder/package isn't within the namespace like you expect. This happens if you right click on My Program/src and create the package there. Notice that it is My Program/src/Broadcast which is what is wrong.

The reason is that the SmsReceiver class isn't in your namespace. In this case you may have something like this in your manifest.

<receiver android:name=".Broadcast.SmsReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

When this is triggered, the SmsReceiver class is NOT found and you'll get the error.

Correct

enter image description here

The correct way to do this, and get the package in the proper namespace is to right click on com.example.my.program and create it there instead. Notice that it is My Program/src/com.example.my.program.Broadcast which is now correctly in the same namespace.

This will be found in by the app with the same manifest code above.

Upvotes: 5

jone
jone

Reputation: 11

you can write the receiver as "static". In the program my.sample, should write receiver " static SimpleSmsReceiver

Upvotes: 1

user573566
user573566

Reputation: 639

I've got a same error. After I modified the "AndroidManifest.xml" like this, the error is resolved.

receiver android:name=".SimpleSmsReceiver"

->

receiver android:name=".SimpleSMSReceiver"

The error was like this.

...
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)

Upvotes: 0

Ben Ripley
Ben Ripley

Reputation: 2145

I had the same problem as well. In my case, my Virtual Device was corrupted.

Try creating a new one and running with it. Worked for me!

Upvotes: 1

lrr
lrr

Reputation: 21

You have to write the complete path to your broadcastReceiver, I mean, if in your manifest file you jave package="com.myapp", but your MySmsBroadcast.java is not exactly under myapp package (it's on myapp.smsStuff.MySmsBroadcast, for example), in the

Upvotes: 2

CommonsWare
CommonsWare

Reputation: 1007534

Your manifest claims you have a class named com.android.GPS21.SmsReceiver, and Android cannot find it.

Upvotes: 13

Related Questions