ContentObserver - 仅根据特定应用观察更改

时间:2013-01-09 13:39:00

标签: android audio contentobserver

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

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

注意:游戏是第三方应用。

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

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

2 个答案:

答案 0 :(得分:0)

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

如果游戏是第三方应用,那么我猜不出来。

答案 1 :(得分: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;
}

所以,既然我知道前景应用程序,它触发音量变化的概率非常高。所以我可以将其排除在触发任何反响之外。它并不完美,但它确实有效。