2013-05-31 63 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"); 
}