2013-05-31 61 views
3

我想知道卷是否已更改。閱讀其他文章,我發現這個代碼註冊一個ContentObserver,並獲得一個事件時,一些變化。 我的問題是,我不知道如何知道發生了什麼變化。我的意思是,我得到了一個OnReceive(),但我怎樣才能獲得額外的信息(例如,按下了哪個音量鍵)。獲取ContentObserver中已更改的內容

我也收到很多不需要的事件,例如,點擊「菜單」按鈕也會觸發此事件,但沒有任何變化(尚未)。

這是我的代碼。

謝謝

public class clsSettingsContentObserver extends ContentObserver 
{ 
    public Context Contexto=null; //This is for displaying Toasts 

    public clsSettingsContentObserver(Handler handler) 
    { super(handler); 
    } 


    @Override public boolean deliverSelfNotifications() 
    { 
     return super.deliverSelfNotifications(); 
    } 


    @Override public void onChange(boolean selfChange) 
    { super.onChange(selfChange); 

     //How do I get more info here????? 
     ShowToast("Settings change detected");  
    } 


    private void ShowToast(String strMensaje) 
    { Toast toast1 = Toast.makeText(Contexto, strMensaje, Toast.LENGTH_SHORT); 
     toast1.show(); 
    }; 

} 

這就是我如何註冊它:

clsSettingsContentObserver oSettingsContentObserver = new clsSettingsContentObserver(new Handler()); 
oSettingsContentObserver.Contexto = this; //This is for displaying Toasts 
getApplicationContext().getContentResolver().registerContentObserver(
      android.provider.Settings.System.CONTENT_URI, 
      true, 
      oSettingsContentObserver); 

回答

0

對於你也可以使用一個廣播接收器的目的:

在清單中註冊此:

<receiver android:name="MyClass" > 
    <intent-filter> 
     <action android:name="android.media.VOLUME_CHANGED_ACTION" /> 
    </intent-filter> 
</receiver> 

使用此代碼MyClass.java:

@Override 
public void onReceive(Context context, Intent intent) { 
    Var_Volume_Value = (Integer) intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE"); 
}