Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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:将变量从Activity传递到BroadcastReceiver_Android_Sms_Broadcastreceiver - Fatal编程技术网

Android:将变量从Activity传递到BroadcastReceiver

Android:将变量从Activity传递到BroadcastReceiver,android,sms,broadcastreceiver,Android,Sms,Broadcastreceiver,我在将变量从Activity传递到BroadcastReceiver时遇到一些问题。。。 这是我的密码: 这是我的广播接收器代码。。。我试着从我的活动中得到的一个电话号码中捕捉短信 public class SMSMonitor extends BroadcastReceiver { private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; public static Stri

我在将变量从Activity传递到BroadcastReceiver时遇到一些问题。。。 这是我的密码:

这是我的广播接收器代码。。。我试着从我的活动中得到的一个电话号码中捕捉短信

public class SMSMonitor extends BroadcastReceiver 
{
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
    public static String phone_number = "";
    public static String msg_body = "";
    public static final String SMS_EXTRA_NAME = "pdus";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        String phone = intent.getExtras().getString("trusted_num");

        if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0)
        {
            Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
            SmsMessage[] messages = new SmsMessage[pduArray.length];

            for (int i = 0; i < pduArray.length; i++)
            {
                messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
            }

            phone_number = messages[0].getDisplayOriginatingAddress();
            msg_body = messages[0].getMessageBody();

            System.out.println("Phone number: "+phone_number);
            System.out.println("Phone entered: "+phone);
        }
    }
}
在这段代码中,我有一个用于输入电话号码的文本字段,我需要使用
intent.putExtra()
方法将其传递给BroadcastReceiver,但在LogCat中,我看到该变量没有传递:

07-25 18:43:57.382: I/System.out(14245): Phone number: +37129690449
07-25 18:43:57.382: I/System.out(14245): Phone entered: null
那么我做错了什么

UPD 也许代码是不正确的,但它对我有用

public void onReceive(Context context, Intent intent)
    {
        phone = intent.getExtras().getString("trusted_num");//get trusted phone number from Settings screen

        //receive SMS
        if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0)
        {
            Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
            SmsMessage[] messages = new SmsMessage[pduArray.length];

            for (int i = 0; i < pduArray.length; i++)
            {
                messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
            }

            phone_number = messages[0].getDisplayOriginatingAddress();
            msg_body = messages[0].getMessageBody();

            System.out.println("Phone number: "+phone_number);
        }
        //check if number is not null
        if (phone != null && phone != "")
        {
            System.out.println("Phone entered: "+phone);
        }

    }
}
public void onReceive(上下文、意图)
{
phone=intent.getExtras().getString(“trusted_num”);//从设置屏幕获取受信任的电话号码
//接收短信
if(intent!=null&&intent.getAction()!=null&&ACTION.CompareTIgnoreCase(intent.getAction())==0)
{
Object[]pduArray=(Object[])intent.getExtras().get(“PDU”);
SmsMessage[]messages=新SmsMessage[pduArray.length];
对于(int i=0;i
您不能将意图传递给广播接收器。“BroadcastReceiver无法查看或捕获与startActivity()一起使用的意图。”


不久前,我遇到了一个类似的问题,通过使用IntentServices和activity的组合解决了这个问题。你必须重组你的程序以适应这些指导方针,你不能将意图传递给广播接收器。“BroadcastReceiver无法查看或捕获与startActivity()一起使用的意图。”


不久前,我遇到了一个类似的问题,通过使用IntentServices和activity的组合解决了这个问题。你必须重组你的程序以适应这些指南。好吧,有些东西不匹配:

您首先发送的是一个意图,没有任何操作,但您指定的是Broadcastreceiver的类;不要这样做:

Intent i = new Intent(Settings.this, SMSMonitor.class);
i.putExtra("trusted_num", phone_num);
sendBroadcast(i);
但不妨尝试:

Intent i = new Intent("my_package_name.Some_general_constant");
i.putExtra("trusted_num", phone_num);
sendBroadcast(i);
然后,您的
BroadcastReceiver
应该知道它也可以处理
“一些常规常量”
操作。因此,请在清单文件中为
SMSMMonitor
注册一个额外操作:

<receiver android:name=".package_to_bla_bla.SMSMonitor">
    <intent-filter>
        <action android:name="my_package_name.Some_general_constant"/>
    </intent-filter>
</receiver>

嗯,有些东西不匹配:

您首先发送的是一个意图,没有任何操作,但您指定的是Broadcastreceiver的类;不要这样做:

Intent i = new Intent(Settings.this, SMSMonitor.class);
i.putExtra("trusted_num", phone_num);
sendBroadcast(i);
但不妨尝试:

Intent i = new Intent("my_package_name.Some_general_constant");
i.putExtra("trusted_num", phone_num);
sendBroadcast(i);
然后,您的
BroadcastReceiver
应该知道它也可以处理
“一些常规常量”
操作。因此,请在清单文件中为
SMSMMonitor
注册一个额外操作:

<receiver android:name=".package_to_bla_bla.SMSMonitor">
    <intent-filter>
        <action android:name="my_package_name.Some_general_constant"/>
    </intent-filter>
</receiver>

但是如果我
使用sendBroadcast()
?我认为这无关紧要。您无法从Intenthmm读取数据,但我更正了代码,现在我可以接收。。。也许代码不正确或其他什么,你能看到我的更新吗?但如果我
使用sendBroadcast()
,我认为这无关紧要。您无法从Intenthmm读取数据,但我更正了代码,现在我可以接收。。。也许代码不正确或者其他什么,你能看到我的更新吗?这里有什么一般约束?这里有什么一般约束?