我正在尝试在我的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方法的情况下更新开关首选项的任何想法?我无法想出这个。