4

当我安装应用程序时,一切正常。每次发送消息时,我都可以打印消息正文,直到锁定手机屏幕。之后,应用程序停止打印传入消息。我尝试了很多方法来克服这个问题,但没有运气。请帮我...

public class SmsReceiveActivity extends Activity{

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sms);

receiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(SMS_RECEIVED)) {
Object[] pdus = (Object[]) bundle.get("pdus");
final android.telephony.SmsMessage[] messages = new android.telephony.SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++) {
    messages[i] = android.telephony.SmsMessage.createFromPdu((byte[]) pdus[i]);
    incomingMsgString += messages[i].getMessageBody().toString();
   }
    // Print Incoming message Body
  }
 }
}        
  getApplication().registerReceiver(receiver, new IntentFilter(SMS_RECEIVED));
 }
}
4

2 回答 2

4

根据BroadcastReceiver 文档,当您注册接收器时registerReceiver(),“暂停时您将不会收到意图”。如果您想要一个独立于您的活动的接收器,您应该将其实现为命名类并将其发布到您的清单中。例如,使用您的匿名创建一个命名类BroadcastReceiver

public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(SMS_RECEIVED)) {
Object[] pdus = (Object[]) bundle.get("pdus");
final android.telephony.SmsMessage[] messages = new android.telephony.SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++) {
    messages[i] = android.telephony.SmsMessage.createFromPdu((byte[]) pdus[i]);
    incomingMsgString += messages[i].getMessageBody().toString();
   }
    // Print Incoming message Body
  }
 }
} 

并在您的清单中添加application标签内的接收器

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

然后,当收到 SMS 消息时,onReceive将调用您的方法。在那里,您可以打包您需要的信息并启动您的意图ActivityService进行进一步处理。

于 2013-01-22T04:28:04.187 回答
0

将您的广播创建为静态内部类并将其注册到清单中。试试这个链接。接收器作为Android中的内部类

于 2013-01-22T04:50:46.103 回答