2013-12-12 2 views
1

브로드 캐스트 수신기 (알람 관리자)에서 어떤 컨텍스트를 사용해야합니까?Android 컨텍스트 문제 - 브로드 캐스트 수신기 (알람 관리자)에서 어떤 컨텍스트를 사용해야합니까?

서비스 내에서이 코드를 사용하려고했지만 AlarmService에서이 코드를 실행하려고하면 getApplicationContext() 및 myLocation.getLocation (this, locationResult)에 오류가 발생합니다.

오류가 제거 된 서비스에서 작동하는 컨텍스트를 전달하려고 시도했지만 프로그램이 실행될 때 프로그램이 중단됩니다.

LocationResult locationResult = new LocationResult(){ 
      @Override 
      public void gotLocation(Location location){ 
       Toast.makeText(getApplicationContext(), "Latitude: "+location.getLatitude()+"\n Longitude: "+location.getLongitude() , Toast.LENGTH_SHORT).show(); 
      } 
     }; 
     MyLocation myLocation = new MyLocation(); 
     myLocation.getLocation(this, locationResult); 

오류 :

축배 :

있어서 getApplicationContext()를 새로 입력 MyLocation.LocationResult (대한 정의이다) {}

메소드의 getLocation (컨텍스트 MyLocation. (MyLocation.LocationResult)

+0

방송 수신기 클래스를 게시하십시오. – keshav

+0

getApplicationContext()를 사용하지 마십시오. classname.this를 사용해야합니다. –

답변

1

이 함수를 유지할 수 있습니다. n MainActivity가 아닌 별도의 클래스 파일.

당신은 멤버 변수를 정의하는 동안 Mainactivity 클래스에

public static Context context = getApplicationContext(); 

을 수행하여이 문제를 해결할 수 있습니다. 그런 다음 다음과 같이 당신은 locationresult 클래스에 토스트 메시지 컨텍스트를 사용할 수 있습니다

Toast.makeText(MainActivity.context, "Latitude: "+location.getLatitude()+"\n Longitude: "+location.getLongitude() , Toast.LENGTH_SHORT).show(); 

편집 :

1) 더 좋은 방법은 Activity에서 매개 변수로 상황을 전달하는 것입니다 어디를 위치 클래스를 초기화하십시오.

2) 현재 방법을 사용하는 경우에는 토스트 메시지를 표시하기 전에 컨텍스트에 대해 null 체크를 추가하여 null 예외 가능성을 제거하십시오.

1

당신 같은 뭔가가 있어야합니다

public class YourApp extends Application { 
     private static YourApp sInstance; 
     public YourApp() { 
      super(); 
      sInstance = this; 
     } 
     public static YourApp getInstance() { 
     return sInstance; 
     } 
} 

그런 다음 코드에서 당신은 항상

YourApp.getInstance을 할 수 있습니다() ->이 응용 프로그램 컨텍스트입니다.

올바른 방법입니다.

관련 문제