2012-09-15 2 views
0

, 아래 코드 :안드로이드 SMS 리스너 나는 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), 가지고있어

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 

내 응용 프로그램 컨텍스트가 동기화되지 않는 이유는 무엇입니까?

감사합니다.

답변

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(); 

시스템이 메모리 부족에 직면하는 경우 :

0

애플리케이션은 언제든지 죽일 수 ... 그것은 당신에게 도움 수 있기를 바랍니다. 따라서 정적 변수 나 싱글 톤은 다시 초기화됩니다. 어쩌면 그것이 null이라는 이유 일 수 있습니다.

SharedPreferences를 응용 프로그램 클래스

에 저장하는 대신 사용해야합니다.