【问题标题】:ContentObserver - observe changes only due to specific appsContentObserver - 仅观察特定应用程序的变化
【发布时间】:2013-01-10 12:38:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: android audio contentobserver


    【解决方案1】:

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

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

    【讨论】:

    • 游戏为第三方应用。不是我的。
    【解决方案2】:

    我找到了一种方法来规避这种情况。

    使用 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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多