可以在没有上下文的函数中使用getPackageManager吗?

时间:2012-07-03 20:28:21

标签: android

这个问题有点难以问:

使用Timer,方法每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,我甚至无法实例化my_context对象,以获取方法getPackageManager。

所以行:'Context.getPackageManager();'有错误!

有人知道如何在“run”方法中启动getPackageManager吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

大多数情况下,你想要的只是getPackageManager()。它永远不会是Context.getPackageManager(),因为它不是静态方法。

看起来你的ProcessesCheck是一个独立的类,所以你需要为这段代码提供一个有效的上下文对象,可能是通过构造函数传递一个。如果您将其命名为context,那么您将拥有context.getPackageManager()

答案 1 :(得分: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;
}

}