4

問題: アプリが実行されているかどうかを確認する必要があります (サービスが既にバックグラウンドで実行されている場合)。それに基づいて、特定のアクティビティまたはアプリを開始するとします。

私が試した、または思いついたが失敗した こと 現在実行中のプロセスを確認しようとし、それに基づいてアプリが実行されているかどうかを判断しようとしました。失敗の理由: 既にバックグラウンドでサービスが実行されているため、アプリの実行ステータスを常に true として取得します。

可能な解決策ですが、Android で可能かどうかはわかりません 1. 別の名前 (パッケージ名) でサービスを実行できる場合 2. アプリの開始時と終了時にブール値をそれぞれ true と false に設定します。しかし、これは良いアプローチですか?

編集::

私が以前にあまり説明的ではなかった場合は申し訳ありません。私が達成しようとしていることを正確に説明しようとしています。

ユーザーが通知をクリックするたびに。アプリが起動されているかどうかを確認した後、2 つのオプションのうちいずれかを実行する必要があります (サービスは常にバックグラウンドで実行されているため、サービスを除く)。1. アプリが既に起動されている場合は、必要なアクティビティを開始します。2. アプリが起動されていない場合は、アプリを起動して必要なアクティビティを開く必要があります。

例: メッセージの到着通知が届きます。アプリケーションが起動された場合は、受信トレイを表示する必要があります。それ以外の場合は、アプリケーションを起動してから受信トレイを開く必要があります。

4

3 に答える 3

2

質問はかなり古いですが、同様の問題の解決策を探すのに時間がかかりすぎたため、自分の回答を投稿したいと思います。私のサービスは、ビジュアル アプリケーション (カメラ、GPS など) によって収集されたデータを送信しています。アプリがオンのときにまだサーバーに送信されていないデータを送信する必要があるため、ユーザーがアプリケーションを閉じるときにオンのままにする必要があります。ただし、動作モードをもう少しソフトに切り替える必要があります (電力を節約するため) (そして、ジョブが終了すると最終的に閉じますが、それは別の話です。最初に、メイン アクティビティからこのサービスにコマンドを送信しようとしました。ユーザーの意図に応じて閉じようとしていたときしかし、タスクリストでアプリをフリックしただけでは機能しませんでした(ホームボタンを長押しするか、他の電話で他のものを押します)別の解決策を見つけました。CommonDataアプリの共通オブジェクトのクラス。次のようなものを書くと気づきました

CommonData.runObject = new Object();

メイン アクティビティのonCreateでは、runObjectアプリがオフになったときに null に設定されます。

したがって、私のサービスでは、アプリが実行されているかどうかをCommonData.runObject != nullfromに伝えるだけで済みます。CommonData.runObject == null

于 2014-11-23T12:13:29.863 に答える
0

サービスがバックグラウンドで動作しているとき、実際にはアプリが実行されています!アプリのアクティビティがフォアグラウンドまたはバックグラウンドであることを確認したい場合は、アクティビティのライフサイクル メソッドを使用してApplicationクラスでブール値を設定するか、リストを取得できると思いますサービスでタスクを実行し、アクティビティが実行されていることを確認します。

ActivityManager activityManager = (ActivityManager)Monitor.this.getSystemService (Context.ACTIVITY_SERVICE); 
List<RunningTaskInfo> activitys = activityManager.getRunningTasks(Integer.MAX_VALUE); 
isActivityRunning = false; 
for (int i = 0; i < activitys.size(); i++) { 
    if (...) {
        isActivityRunning = true;
        break;
    }
}

しかし、これを見てください。

その他:

アクティビティがサービスから実行されているかどうかを確認する

アクティビティの 1 つがフォアグラウンドにあるかどうかを判断する方法

Android アクティビティが実行されているかどうかを検出する

于 2012-11-03T19:23:03.437 に答える
0

ハサンが言ったように、あなたが明確ではないので推測してみます。サービスを実行している場合、それは実行中のアプリです。そのため、アプリと言うと、サービスとは異なる別のアプリである可能性があります。アクティビティについて話し、それはフォアグラウンドまたはバックグラウンドにある可能性があります。

いずれの場合でも、サービス内に false に設定された静的ブール値を設定し、アプリケーションの状態と実行中のアプリに関する独自の定義に基づいてアプリが実行されていると見なされるたびに、それを true または false に設定できます。 . 有効にする状態をオーバーライドし、ブール値を true に設定する必要があります。無効にする場合は、オーバーライドして false に設定します。

アクティビティのライフサイクルを確認するには、ここを参照してください。通常は、アプリケーションの寿命をアクティビティの寿命で測定する必要があります。これは、ユーザーにとって最も目に見えるものであるためです。

http://developer.android.com/training/basics/activity-lifecycle/index.html

于 2012-11-03T19:51:56.333 に答える