2013-01-09 33 views
1

我有一個ContentObserver設置爲檢查服務中的音頻更改。我想知道是否有辦法限制ContentObserver僅觸發某些應用程序。假設我正在玩一個可以改變音量的遊戲,之後我在設置中改變音量。我只希望服務在遊戲更改音量時觸發警報。我如何去做這件事?ContentObserver - 僅觀察由於特定應用程序導致的更改

注意:遊戲是第三方應用程序。

編輯 有沒有辦法接收堆棧順序的命令?說一個程序訪問設置來改變音量,顯然設置會知道哪個程序試圖改變音量。有沒有辦法讓設置拋出應用程序的包名?還是有辦法知道它是否在設置中直接更改。

假設我在應用程序抽屜中並更改了音量,這會被歸類爲直接更改,並通過應用程序進行第三方更改。有沒有辦法找出什麼時候是直接改變?

回答

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

所以,現在我知道了前臺應用程序,它引發的體積變化的概率是非常高的。所以我可以排除它觸發任何迴應。這不是完美的,但它的工作原理。

0

您可以製作自己的廣播意圖,並在遊戲發生變化時將其發射出去。然後在第二個應用中收到它。

如果遊戲是第三方應用程序,那麼我就不會猜測。

+0

該遊戲是第三方應用程序。不是我的。 –

相關問題