1

サービスの音声変更をチェックするようにContentObserverを設定しています。ContentObserverのトリガーを特定のアプリのみに制限する方法があるかどうか知りたいです。

たとえば、音量を変更できるゲームをプレイしていて、その後、設定で音量を変更します。ゲームによって音量が変更された場合にのみ、サービスがアラートをトリガーするようにしたい。どうすればこれを行うことができますか?

:ゲームはサードパーティのアプリです。

編集 コマンドのスタック順序を受け取る方法はありますか?プログラムが設定にアクセスして音量を変更するとします。明らかに、設定はどのプログラムが音量を変更しようとしているのかを認識します。アプリのパッケージ名をスローする設定を取得する方法はありますか?または、設定で直接変更されたかどうかを知る方法はありますか。

私がアプリドロワーにいて音量を変更するとします。これは直接変更として分類され、アプリを介してサードパーティの変更として分類されます。それが直接の変更であるかどうかを確認する方法はありますか?

4

2 に答える 2

0

独自のブロードキャストインテントを作成し、ゲームが変更されたときにそれを起動できます。次に、2番目のアプリで受け取ります。

ゲームがサードパーティのアプリである場合、私が推測する方法はありません。

于 2013-01-09T13:51:56.190 に答える
0

これを回避する方法を見つけました。

ContentObserverを使用するサービスに、このコードを追加しました

private RunningAppProcessInfo getForegroundApp() {
RunningAppProcessInfo result=null, info=null;

if(mActivityManager==null)
    mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
List <RunningAppProcessInfo> l = mActivityManager.getRunningAppProcesses();
Iterator <RunningAppProcessInfo> i = l.iterator();
while(i.hasNext()){
    info = i.next();
    if(info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND
            && !isRunningService(info.processName)){
        result=info;
        break;
    }
}
return result;
}

つまり、フォアグラウンドアプリがわかったので、それが音量の変化を引き起こした可能性は非常に高いです。だから私はそれをどんな応答のトリガーからも除外することができます。完璧ではありませんが、機能します。

于 2013-01-10T04:38:11.480 に答える