0

SMSが特定の番号からのものである場合にトリガーするifステートメントがありますが、トリガーされることはありません。これが私のSMSReceiver.javaです。

public String SMSMessage;
public String incomingNumber;

public void onReceive(Context context, Intent intent) 
{
    if (intent.getAction().equals(SMS_RECEIVED)) 
    {
        abortBroadcast();
        Bundle bundle = intent.getExtras();
        if (bundle != null) 
        {
            Object[] pdus = (Object[])bundle.get("pdus");
            final SmsMessage[] messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++)
            {
                messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
            }
            SMSMessage = messages[0].getMessageBody();
            incomingNumber = messages[0].getOriginatingAddress();
            MainActivity.updatePowerUsageTitle(SMSMessage);
            MainActivity.updatePowerUsageSummary(incomingNumber);
            if (incomingNumber == "XXXXXXXXX" || incomingNumber == "XXXXXXXXXX")
            {  
                Toast.makeText(context, messages[0].getMessageBody(), Toast.LENGTH_SHORT).show();
                if (SMSMessage.contains("Turn"))
                {
                    //TODO: Set toast for incoming message
                    Toast.makeText(context, messages[0].getMessageBody(), Toast.LENGTH_SHORT).show();
                }
                else if (SMSMessage.contains("ref"))
                {
                    //TODO: Set refresh for switches
                }
                else if (SMSMessage.contains("power"))
                {
                    //Refresh power stats
                    int END = SMSMessage.length();
                    SMSMessage = SMSMessage.substring(6 , END);
                    MainActivity.updatePowerUsageTitle(SMSMessage);
                }
            }
        }
    }
}

これは重要な部分です:

incomingNumber = messages[0].getOriginatingAddress();
if (incomingNumber == "XXXXXXXXX" || incomingNumber == "XXXXXXXXXX")
{
Toast.makeText(context, messages[0].getMessageBody(), Toast.LENGTH_SHORT).show();
}

もちろん、ここには電話番号を入れていませんが、番号が正しいことはわかっています。ifステートメントがトリガーされない理由に関する手がかりはありますか?

4

1 に答える 1

2

JavaでsString.equals()比較する適切な方法であるため、とを比較してみてください。代わりに参照を比較します。このSOの質問は、違いを説明しています。String==

if ("XXXXXXXXX".equals(incomingNumber) || "XYZ".equals(incomingNumber))

そしていつものように、マニフェストに適切な権限があることを確認してください。また、これでも機能しない場合は、のルートにprintステートメントを配置してonReceive()、メソッドがまったく呼び出されていないかどうかを確認します。

于 2013-02-10T00:07:21.960 に答える