从SMSReceiver中调用MainActivity中的非静态方法

时间:2013-02-13 01:19:18

标签: java android static sms

我正在尝试在我的MainActivity中调用一个方法,但我的应用程序中的SMSReceiver类一直给我错误。我得到一个“无法对非静态方法进行静态引用”。这是我的问题。我需要更新一些SwitchPreferences而不调用onSharedPreferenceChanged方法。我的想法是在更改之前取消注册共享首选项的侦听器,然后在完成所有更改后再次注册它。这就是我所说的:

SMSReceiver Class

incomingNumber = messages[0].getOriginatingAddress();
            if (incomingNumber.equals(number))
            {  
                abortBroadcast();
                SMSMessage = messages[0].getMessageBody();
                if (SMSMessage.substring(0, 19).equals("Command Executed Tur") || SMSMessage.substring(0, 3).equals("Tur"))
                {
                    Toast.makeText(context, "Command executed successfully!", Toast.LENGTH_SHORT).show();
                }
                else if (SMSMessage.substring(0, 20).equals("Command Executed Ref"))
                {
                    Toast.makeText(context, "Switches refreshed", Toast.LENGTH_SHORT).show();
                    String messageUnsplit = SMSMessage.substring(21, SMSMessage.length());
                    String[] switches = messageUnsplit.split(" ");
                    MainActivity.updateSwitch1(switches[0]);
                    MainActivity.updateSwitch2(switches[1]);
                    MainActivity.updateSwitch3(switches[2]);
                    MainActivity.updateSwitch4(switches[3]);
                    Toast.makeText(context, "Switches refreshed", Toast.LENGTH_SHORT).show();
                }
            }

MainActivity Class

public static void updateSwitch1(String Bool)
{
    if (Bool.equals("ON"))
    {
        mSwitchPreference1.setChecked(true);
    }
    else
    {
        mSwitchPreference1.setChecked(false);
    }
}

我用来取消注册监听器的代码不能在静态方法中工作: PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(listener);

但现在的方式是更新共享首选项并最终发送另一个文本。如果我不使该方法静态,我在SMSReceiver类中收到错误。有关如何在不调用onSharedPreferenceChanged方法的情况下更新开关首选项的任何想法?我无法想出这个。

0 个答案:

没有答案