Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当移动屏幕锁定时,广播接收器不会触发_Android_Broadcastreceiver - Fatal编程技术网

Android 当移动屏幕锁定时,广播接收器不会触发

Android 当移动屏幕锁定时,广播接收器不会触发,android,broadcastreceiver,Android,Broadcastreceiver,当我安装应用程序时,一切正常。我可以在每次发送邮件时打印邮件正文,直到锁定手机屏幕。之后,应用程序停止打印传入消息。我尝试了很多方法来克服这个问题,但没有成功。请帮帮我 public class SmsReceiveActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

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

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));
 }
}
公共类SmsReceiveActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
接收器=新的广播接收器(){
@凌驾
公共void onReceive(上下文、意图){
if(intent.getAction().equals(SMS_已接收)){
Object[]pdus=(Object[])bundle.get(“pdus”);
final android.telephony.SmsMessage[]messages=新的android.telephony.SmsMessage[pdus.length];
对于(int i=0;i
根据
广播接收器
,当您使用
注册接收器()
注册接收器时,“暂停时您将不会收到意图”。如果您想要一个独立于您的活动的接收者,您应该将其实现为一个命名类,并在清单中发布它。例如,使用匿名
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
  }
 }
} 

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

将广播创建为静态内部类,并在清单中注册。试试这个链接

我们为什么要这样做-SmsMessage[]消息。为什么是阵列?是否适用于多个SMS?
    <receiver android:name=".MyReceiver" >
    <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/ >
    </intent-filter>
    </receiver>