【问题标题】:Using static methods in Android with getApplicationContext()? [duplicate]在 Android 中通过 getApplicationContext() 使用静态方法? [复制]
【发布时间】:2013-07-19 12:24:40
【问题描述】:

我正在开发一款名为 Drive Mode 的应用程序,该应用程序允许用户在设置中输入自定义消息,并让此消息自动回复任何传入的文本。 (当然还有其他功能)我的问题是尝试引用静态字符串并使用 getApplicationContext();

我正在从 EditTextPreference 中获取文本,并尝试在多个活动中访问此字符串。

已修复:此问题现已修复,我已编辑整篇文章以更好地帮助可能遇到相同问题的其他人。谢谢大家的帮助。

public class Main extends Activity implements OnSharedPreferenceChangeListener {

    ...

    public static String reply = "";

    ...

    public void loadPreferences() {
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        settings.registerOnSharedPreferenceChangeListener(Main.this);

        if (settings.getBoolean("cbReply", true)) {
            reply = settings.getString("tbMessage", "@string/pd_message");
            ...
        } else {
            ...
        }

【问题讨论】:

  • 只有相关代码(失败的方法)。
  • @RSenApps 令人讨厌的是,几乎每篇文章都以“post logcat”开头,即使问题是关于编译器错误。
  • 我只是想感谢社区如此迅速的响应,不幸的是,我在发布问题大约一个小时后卖掉了我的电脑,直到几天前才拿到我的新电脑。仅仅看到人们在 5 分钟内的回复就很棒,谢谢大家!

标签: android sms


【解决方案1】:

您可以通过添加 Context 参数使这些方法静态

public static void reply(Context context) {
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
    final String message = settings.getString("message", "@string/pd_message");

    send(context, Receiver.number, message);
}

public void send(Context context, String number, String message) {
    PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(context, Main.class), 0);
    SmsManager sm = SmsManager.getDefault();
    if (Receiver.number != "") {
        sm.sendTextMessage(number, null, message, pi, null);
    }
}

【讨论】:

  • reply内部对send的调用需要传递context参数。
  • 这个答案对我来说非常有效。在 OP 中,我也找到了一种简单的方法,但我非常感谢您的帮助。我会更早地接受答案,但几周没有电脑。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2012-04-24
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多