我设置了一个ContentObserver来检查服务中的音频更改。我想知道是否有办法限制ContentObserver仅触发某些应用程序。
说,我正在玩一个可以改变音量的游戏,然后我在设置中更改音量。我希望服务仅在游戏更改音量时触发警报。我该怎么做?
注意:游戏是第三方应用。
修改的 有没有办法接收命令的堆栈顺序?假设程序访问设置以更改音量,显然设置将知道哪个程序正在尝试更改音量。有没有办法让设置抛出应用程序的包名?或者有没有办法知道它是否在设置中直接更改。
假设我在应用程序抽屉中并更改音量,这将被归类为直接更改,并通过应用程序进行第三方更改。有没有办法找出什么时候直接改变?
答案 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;
}
所以,既然我知道前景应用程序,它触发音量变化的概率非常高。所以我可以将其排除在触发任何反响之外。它并不完美,但它确实有效。