1

我设置了一个 ContentObserver 来检查服务中的音频更改。我想知道是否有办法将 ContentObserver 的触发限制在某些应用程序上。

比如说,我正在玩一个可以更改音量的游戏,然后我在设置中更改音量。我希望该服务仅在游戏更改音量时触发警报。我该怎么做?

注意:该游戏是第 3 方应用程序。

编辑 有没有办法接收命令的堆栈顺序?假设一个程序访问设置以更改音量,显然设置会知道哪个程序正在尝试更改音量。有没有办法让设置抛出应用程序的包名?或者有没有办法知道它是否直接在设置中更改。

假设我在应用程序抽屉中并更改音量,这将被归类为直接更改并通过应用程序进行第三方更改。有没有办法找出什么时候是直接变化?

4

2 回答 2

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 回答
0

您可以制作自己的广播意图并在游戏进行更改时触发它。然后在您的第二个应用程序中接收它。

如果游戏是第三方应用程序,那我猜是不可能的。

于 2013-01-09T13:51:56.190 回答