2

この質問は少し難しいです:

タイマーを使用すると、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.....
}

}

run メソッドは 5 秒ごとに実行されます。

しかし問題は、Context がなく、メソッド getPackageManager を取得するために my_context オブジェクトをインスタンス化することさえできないことです。

したがって、次の行:'Context.getPackageManager();' エラーがあります!

メソッド「run」でgetPackageManagerを起動する方法を知っている人はいますか?

ご協力いただきありがとうございます

4

2 に答える 2

1

ほとんどの場合、それgetPackageManager()はあなたが望むだけです。Context.getPackageManager()これは static メソッドではないため、決してではありません。

あなたのクラスはスタンドアロン クラスのように見えるProcessesCheckので、このコードで有効なコンテキスト オブジェクトを使用できるようにする必要があります。おそらく、コンストラクターを介して渡してください。名前を付けるとcontextcontext.getPackageManager().

于 2012-07-03T20:38:40.593 に答える
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;
}

}
于 2012-07-03T21:44:22.943 に答える