0

我正在使用 SMS 监听器,代码如下:

public class SMSReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        EventEntry entry = ((MyApplication)context.getApplicationContext()).getCurrent();
        System.out.println("Received message: " + smsMessage[0].getMessageBody() + " - SILENCE IS " + ((entry != null) ? "ON" : "OFF"));
    }
}

并在修改 AndroidManifest 之后

<application
    android:name="MyApplication" ...

在我的代码的另一部分(在 AlarmManager 的 BroadcastReceiver 中),我有

public void onReceive(Context context, Intent intent) {
    ((MyApplication).context.getApplicationContext()).setCurrent("TESTING");
}

但是,当我运行应用程序并发送示例文本时,我会收到以下调试消息:

09-15 15:07:30.974: I/System.out(21625): DEBUG!!!!!! Setting current event to TESTING
09-15 15:07:54.399: I/System.out(21605): DEBUG!!!!!! Getting current event: null

任何想法为什么我的应用程序上下文不同步?

谢谢!

4

2 回答 2

0

我可以给你一个替代的解决方案,只是你可以在你的MyApplication 类中覆盖 onCreate()方法。

class MyApplication extends Application {
private static MyApplication singleTon;

public MyApplication getInstance(){
return singleTon;
}

@Override
public void onCreate() {
singleTon = this;
}


...... Here your remaining code....

}

现在您可以访问该类的实例,然后调用 getApplicationContex();

 (MyApplication.getInstance().getapplicationContext()).getCurrent();

希望对你有帮助……:)

于 2012-09-15T20:46:11.067 回答
0

如果系统面临内存不足,您的应用程序可以随时终止。所以静态变量或单例将被重新初始化。也许这就是它为空的原因。

您应该使用 SharedPreferences 而不是将其存储在应用程序类中

于 2012-09-15T20:47:27.193 回答