2012-07-03 2 views
0

이 질문은 물어 조금 어렵습니다 : 타이머와컨텍스트가없는 함수에서 getPackageManager를 사용할 수 있습니까?

, 방법은 각각 5 초 시작되고이 함수 내에서 나는 활동이 실제로 그렇게 실행하는 내가 쓸 것을 알아야합니다

public class ProcessesCheck extends TimerTask { 

@Override 
public void run() { 
    Log.w("hello", "my name is Nicolas".concat(String.valueOf(SystemClock.uptimeMillis()))); 
    Context.getPackageManager(); 
     etc..... 
} 

}

실행 방법은 5 초마다 실행됩니다.

하지만 문제는 Context가없고 심지어 getPackageManager 메소드를 가져 오기 위해 my_context 객체를 인스턴스화 할 수 없다는 것입니다.

그래서 'Context.getPackageManager();' 오류가있다!

"실행"메소드에서 getPackageManager를 시작하는 방법을 아는 사람이 있습니까? 당신의 도움이

답변

1

에 대한

덕분에 대부분의 시간 그것은 단지 당신이 원하는 getPackageManager()입니다. 정적 메서드가 아니기 때문에 절대로 Context.getPackageManager()이 아닙니다.

ProcessesCheck이 독립 실행 형 클래스 인 것처럼 보이므로이 코드에서 유효한 컨텍스트 개체를 생성자를 통해 전달해야 할 수 있습니다. context의 이름을 지정하면 context.getPackageManager()이됩니다.

+0

문제는 추상적 인 것처럼 Context를 인스턴스화 할 수도 없다는 것입니다. –

+0

@ NicolasBourdon 네, 그게 "생성자를 통해 전달하는 것으로 유효한 컨텍스트 개체를 사용할 수있게 만드는 것"입니다. 수업을 수업의 내부 수업으로 만드는 것이 또 다른 좋은 방법입니다. –

+0

네, 정말로 제가 한 일입니다. 고마워요! –

0

마침내 나는 그것을했고, 잘 작동하는 것 같습니다.

public class Automated_launcher_service extends Service { 

Context my_service = this; 

private TimerTask my_TimerTask = new TimerTask() { 
    public void run() { 
     Log.w("hello", "my name is Nicolas" + String.valueOf(SystemClock.uptimeMillis())); 
     Object my_packages = my_service.getPackageManager(); 
     Log.w("hello", "my name is Nicolas" + String.valueOf(my_packages)); 
    } 
}; 


int i = 0; 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Timer my_timer = new Timer("automated launchemy loop",true); 
    if(i==0){ 
     i=1; 
     my_timer.schedule(my_TimerTask, 0, 5000); 
    } 
    return super.onStartCommand(intent,flags,startId); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

} 
관련 문제