Невозможно создать экземпляр получателя в SMS BroadcastReceiver - PullRequest
9 голосов
/ 06 января 2011

Почему у меня эта ошибка:

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

Это мои события onReceive:

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

В отладке, что onReceive () является ошибкой.

Я простозаставить BroadcastReceiver получать SMS и показывать в уведомлении Toast ..

И я пытаюсь отправить SMS с DDMS, и эта ошибка появляется ..

Ответы [ 9 ]

13 голосов
/ 06 января 2011

Ваш манифест утверждает, что у вас есть класс с именем com.android.GPS21.SmsReceiver, и Android не может его найти.

5 голосов
/ 24 ноября 2012

Это старый вопрос, и я не уверен, что это была ваша проблема, но у меня просто была эта проблема. В Eclipse я создал папку (на самом деле пакет ) в неправильном месте. Например

Некорректное

enter image description here

Причина, по которой это неверно, заключается в том, что папка / пакет Broadcast не находится в пространстве имен, как вы ожидаете. Это происходит, если вы щелкнете правой кнопкой мыши по Моя программа / src и создадите там пакет. Обратите внимание, что это Моя программа / src / Broadcast , что является неправильным.

Причина в том, что класс SmsReceiver не находится в вашем пространстве имен. В этом случае у вас может быть что-то подобное в вашем манифесте.

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

Когда это срабатывает, класс SmsReceiver НЕ найден, и вы получите ошибку.

Корректное

enter image description here

Правильный способ сделать это и получить пакет в правильном пространстве имен - щелкнуть правой кнопкой мыши на com.example.my.program и создать его там вместо этого. Обратите внимание, что это Моя программа / src / com.example.my.program.Broadcast , которая теперь правильно находится в том же пространстве имен.

Это будет найдено в приложении с таким же кодом манифеста, приведенным выше.

4 голосов
/ 08 мая 2014

Ваш класс broadcastReceiver должен быть публичным классом, например

открытый класс ReceptorLlamadas extends BroadcastReceiver

2 голосов
/ 04 мая 2011

Вы должны написать полный путь к вашему вещанию, я имею в виду, если в вашем файле манифеста вы jave package = "com.myapp", но ваш MySmsBroadcast.java не совсем в пакете myapp (это на myapp.smsStuff. MySmsBroadcast, например), в

1 голос
/ 22 июля 2012

вы можете написать приемник как «статический».В программе my.sample следует написать приемник "static SimpleSmsReceiver

1 голос
/ 03 июня 2012

У меня была такая же проблема.В моем случае мое виртуальное устройство было повреждено.

Попробуйте создать новое и запустить с ним.Работал на меня!

0 голосов
/ 25 сентября 2017

Укажите полное имя класса, которое сработало для меня

Как это: *

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

*

0 голосов
/ 12 марта 2014

Убедитесь, что у вас есть открытый конструктор без параметров. Например, у меня есть собственная реализация BroadcastReceiver, которая получает некоторые свойства в конструкторе. После того, как я добавил общедоступный конструктор по умолчанию (без параметров), он работает отлично.

0 голосов
/ 13 января 2011

У меня та же ошибка.После того как я изменил «AndroidManifest.xml» следующим образом, ошибка устраняется.

receiver android:name=".SimpleSmsReceiver"

->

receiver android:name=".SimpleSMSReceiver"

ошибка была такая.

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