2011-06-21 8 views
2

現在、特定の設定を自動的に変更するアプリケーションを作成しようとしています(サウンドをオフにするなど)アプリケーションがアクティブでなくなったときに元の設定に戻ります。 特定のアプリケーション(鉱山ではない)がユーザーに表示/非表示になったときの検出

EDITED 申し訳ありませんが、私は質問をうまく説明したと思います。私は現在、特定のアプリケーション(例えば、youtube app)がユーザーに見えるようになると、ユーザーがちょうどそのアプリケーションを起動/ナビゲートしたことを検出できるようにするアプリケーションを作成しようとしています。

これを検出すると、電話の音をオフにするなどの設定変更を行いたいと思います(私はすでにこの部分を分かっています)。そして、私はyoutubeアプリがもはやユーザーに見えなくなったことを検知すると、設定を元に戻す必要があります。

私が知りたいのは、(アプリケーションではない)すべてのアプリケーションがユーザーに表示/非表示になったときを検出するメカニズムです。

アプリのTaskerのような種類です。

私はこれをどのように達成するかを考えようとしています。アプリケーションがアクティブになったことを通知するブロードキャストレシーバはないようです。私が考えることのできる1つの方法は、現在実行中のタスクを常にポーリングするサービスを作成することです。しかし、これは非常に悪いパフォーマンスを与えるようです。

誰かが提案する可能性のある選択肢はありますか?

ありがとうございました

+0

を、あなたは、単にアプリケーションが表示されている場合、すなわち、ユーザが自宅を押すか、別のアクティビティに移動していない意味ですか? –

+0

「アプリケーションがアクティブ/非アクティブになるとき」とはどういう意味ですか? – pandre

+0

申し訳ありませんが、私はおそらくそれを正しく説明しませんでした。私が意味することは、アプリケーション(私のアプリケーションではない)が見えるようになったとき、およびそれが見えなくなったときを検出する何らかの方法がありたいということです。たとえば、ユーザーがYouTubeアプリケーションを開いたり移動したりすると、アプリケーションは自動的に電話の音量を最大にし、YouTubeアプリケーションを終了したり別のアプリケーションに移動したりすると、アプリケーションは古いサウンド設定を再び復元します。 – Coins

答えて

2

おそらく、実行中のプロセスのリストが必要であり、何かを実行しているとします。
は、次のコードを使用してこの操作を行うことができます。

ActivityManager actMngr = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> runningAppProcesses = actMngr.getRunningAppProcesses(); 
for (RunningAppProcessInfo pi : runningAppProcesses) { 
    //Check pi.processName and do your stuff 
    //also check pi importance - check if process is in foreground or background 
    if (pi.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
     //DO YOUR STUFF 
    } 
} 

リストにそれはあなたがGET_TASKSの許可を必要とする処理に注意してください。あなたのマニフェストにこれを追加することによってこれを行うことができます
:アクティブことで

<uses-permission android:name="android.permission.GET_TASKS" />  
+0

こんにちはpandre、答えをありがとう、実際に私が実行したいものですが、私の質問は実際にあなたが与えたコードを実行するタイミングを実際に検出しています。私はサービスで実行中のprocesesリストを常にポーリングするという行に沿って考えていましたが、それは悪いパフォーマンスを与えるようです。 – Coins

+0

こんにちは@コイン私は私のアプリでやっている - 私は定期的にプロセスのリストをポーリングします。ハンドラを使用して、私が投稿したコードを実行することができます – pandre

+0

ああ、ありがとうpandre。私はそれを試してみましょう – Coins

0

アクティブとはどういう意味ですか?アプリケーションが実行中または終了のいずれかで、あなたが一方のアプリケーションonCreate()onTerminate()

の動作を変更するには、2つのフックを持っている、アプリケーションが活動などのさまざまなコンポーネントを、持っている、と活動が持つlifecycleより複雑なを持っています類似のフック。

関連する問題