在Android中使用getApplicationContext()和静态方法?

3
我正在开发一个名为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 {
            ...
        }

只返回相关代码(失败的方法)。 - Nir Alfasi
1
@RSenApps 很烦人的是,几乎每篇帖子都以“post logcat”开头,即使问题是关于编译器错误的。 - Simon
我只想感谢社区如此迅速地回应,不幸的是,我在发布问题后大约一个小时就卖掉了我的电脑,直到几天前才得到了新电脑。看到人们在不到5分钟内回复真是太神奇了,谢谢大家! - sociallymellow
1个回答

4

您可以通过添加一个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 参数。 - Ted Hopp
这个答案对我非常有效。在原帖中,我也找到了一个简单的方法,但是我非常感谢您的帮助。我本来会更早地接受这个答案,但是我没有电脑几周。谢谢! - sociallymellow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接