2012-07-03 92 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秒運行一次。

但問題是,我沒有上下文,我什至不能實例化一個my_context對象,以獲得方法getPackageManager。

所以行:'Context.getPackageManager();'有錯誤!

有人知道如何在「運行」方法中啓動getPackageManager?

感謝您的幫助

回答

1

大多數時候,它只是你想要getPackageManager()。它從來不是Context.getPackageManager(),因爲它不是一個靜態方法。

它看起來像你的ProcessesCheck是一個獨立的類,所以你需要創建一個有效的上下文對象可用於此代碼,也許通過構造函數傳入一個。如果您將其命名爲context,那麼您將擁有context.getPackageManager()

+0

問題是,我甚至不能實例上下文,因爲它是抽象的。 –

+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; 
} 

} 
相關問題