Android SMS监听器错误的应用程序上下文

时间:2012-09-15 19:15:53

标签: android sms broadcastreceiver applicationcontext

我正在使用短信听众,代码如下:

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

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

谢谢!

2 个答案:

答案 0 :(得分: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();

希望它能对你有所帮助...... :)

答案 1 :(得分:0)

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

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