无法在BroadcastReceiver SMS中实例化接收器

fad*_*wdt 9 sms android broadcastreceiver

为什么我有这个错误:

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
Run Code Online (Sandbox Code Playgroud)

这是我的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();
  }
Run Code Online (Sandbox Code Playgroud)

在调试中,onReceive()是错误的.

我只是让BroadcastReceiver接收短信并在通知Toast中显示..

我尝试从DDMS发送短信,然后出现错误..

Com*_*are 13

你的清单声称你有一个名为的类com.android.GPS21.SmsReceiver,Android无法找到它.


Kir*_*irk 5

这是一个老问题,我不确定这是你的麻烦,但我只是遇到了这个问题.在Eclipse中,我在错误的位置创建了文件夹(实际上是一个).例如

不正确

在此输入图像描述

这是不正确的原因是广播文件夹/包不像你期望的那样在命名空间内.如果您右键单击My Program/src并在那里创建包,就会发生这种情况.请注意,这是我的程序/ src/Broadcast,这是错误的.

原因是SmsReceiver类不在您的命名空间中.在这种情况下,您的清单中可能会有类似的内容.

<receiver android:name=".Broadcast.SmsReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

触发此操作时,找不到SmsReceiver类,您将收到错误.

正确

在此输入图像描述

执行此操作的正确方法,并将包放在正确的命名空间中是右键单击com.example.my.program并在其中创建它.请注意,它是My Program/src/com.example.my.program.Broadcast,它现在正确地位于同一名称空间中.

这将在应用程序中找到,具有相同的清单代码.