Java Android:将值从activity传递给broadcastreceiver

Java Android:将值从activity传递给broadcastreceiver,java,android,Java,Android,首先,对不起,我语法不好。我正在使用broadcastreceiver开发自动回复消息应用程序。当我可以从activity接收到broadcastreceiver的值时,自动回复将无法工作。但如果我没有从活动中获得价值,它就起作用了。这是我的活动代码,我把它放在onSensorChanged()中 这是我的广播接收机课程 public class AutoReply extends BroadcastReceiver{ private static final String SMS_RECEI

首先,对不起,我语法不好。我正在使用broadcastreceiver开发自动回复消息应用程序。当我可以从activity接收到broadcastreceiver的值时,自动回复将无法工作。但如果我没有从活动中获得价值,它就起作用了。这是我的活动代码,我把它放在onSensorChanged()中

这是我的广播接收机课程

public class AutoReply extends BroadcastReceiver{

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Log.i("message", "Broadcast Received: " +action);

    if (action.equals(SMS_RECEIVED) && action.equals("my.action.string")) {
        Bundle bundle = intent.getExtras();
        String state = bundle.getString("apaan");

        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            final SmsMessage[] sms = new SmsMessage[pdus.length];
            String isiSMS = "", noPengirim = "";
            for (int i = 0; i < pdus.length; i++) {
                sms[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                isiSMS = sms[i].getMessageBody();//mengambil isi pesan dari pengirim
                noPengirim = sms[i].getOriginatingAddress();//mengambil no pengirim
            }

            String message = state;//isi balasan autoreplay

            SmsManager smsSend = SmsManager.getDefault();
            smsSend.sendTextMessage(noPengirim, null, message, null, null);
        }
    }
}
公共类自动回复扩展BroadcastReceiver{
私有静态最终字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
@凌驾
公共void onReceive(上下文、意图){
String action=intent.getAction();
Log.i(“消息”,“接收到广播:”+操作);
if(action.equals(收到短信)&&action.equals(“my.action.string”)){
Bundle=intent.getExtras();
字符串状态=bundle.getString(“apaan”);
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
最终SmsMessage[]sms=新SmsMessage[pdus.length];
字符串isiSMS=“”,noPengirim=“”;
对于(int i=0;i
这是我的舱单

<receiver android:name=".AutoReply" android:enabled="true">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="my.action.string" />
        </intent-filter>
</receiver>

该操作将永远不会同时接收到
android.provider.Telephony.SMS_
my.action.string

更改此项:

if (action.equals(SMS_RECEIVED) && action.equals("my.action.string")) {
为此:

if (action.equals(SMS_RECEIVED) || action.equals("my.action.string")) {

此外,您没有在手动创建的意图中发送
pdu
,因此当您调用
bundle.get(“pdu”)时
它将返回null。然后,当您调用
pdus.length
时,它将抛出一个NullPointerException。

该操作永远不会同时是
android.provider.Telephony.SMS\u接收的
my.action.string

更改此项:

if (action.equals(SMS_RECEIVED) && action.equals("my.action.string")) {
为此:

if (action.equals(SMS_RECEIVED) || action.equals("my.action.string")) {

此外,您没有在手动创建的意图中发送
pdu
,因此当您调用
bundle.get(“pdu”)时
它将返回null。然后当你调用
pdus.length时,它将抛出一个NullPointerException。

谢谢你的回答。但是当我尝试时,我在broadcastreceiver类的final SMSMSMessage[]sms=…]行中遇到另一个错误。它说,尝试获取null数组的长度是因为你没有发送“pdu”,因此,当您调用
bundle.get(“PDU”)
时,它返回null。然后当您调用
pdus.length
时,它抛出一个NullPointerException。谢谢,我明白了。但是我该怎么做来修复错误呢?谢谢您的回答。但是,当我尝试它时,我的broadcastreceiver类在line final SMSMSMessage[]中遇到了另一个错误sms=….它说试图获取null数组的长度是因为你没有发送“PDU”,所以当你调用
bundle.get(“PDU”)
时,它返回null。然后当你调用
pdus.length
时,它抛出一个NullPointerException。谢谢,我得到了它。但是我应该做什么来修复这个错误呢?