public static final String CURRENT_MEDIA_TOOL = "current_media_tool";
private void registerObserver() {
Uri uri = Settings.System.getUriFor(MusicManager.CURRENT_MEDIA_TOOL);
mContext.getContentResolver().registerContentObserver(uri, false,
mObserver);
}
private ContentObserver mObserver = new ContentObserver(null) {
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
String uriStr = uri.getLastPathSegment();
if (MusicManager.CURRENT_MEDIA_TOOL.equals(uriStr)) {
String currentMediaTool = Settings.System.getString(
mContext.getContentResolver(),
MusicManager.CURRENT_MEDIA_TOOL);
LogUtil.d(TAG, "play media changed! currentMediaTool is:"
+ currentMediaTool);
switch (currentMediaTool) {
case MusicManager.CHEYUEBAO:
registerCYBMusic();
registerCYBFm();
break;
case MusicManager.KUWO:
registerKuWoMusic();
break;
}
}
}
};
//不用的时候 注意移除
mContext.getContentResolver().unregisterContentObserver(mObserver);
调用的地方
public static final void setCurrentMedia(Context ctx, String str) {
LogUtil.d(TAG, "setCurrentMedia: : " + str);
Settings.System.putString(ctx.getContentResolver(), CURRENT_MEDIA_TOOL,
str);
}
只要设置入的 key值有变化就会自动调用 oberser的 onChange方法
实例二、电池百分比控制部分
mContext.getContentResolver().registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.BATTERY_PERCENTAGE), true,
mBatteryPercentageObserver);
final private ContentObserver mBatteryPercentageObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
final boolean enable = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.BATTERY_PERCENTAGE, 0) != 0;
mBatteryLevel.setVisibility(enable ? View.VISIBLE : View.GONE);
final SignalClusterView mSignalCluster =
(SignalClusterView) mStatusBarView.findViewById(R.id.signal_cluster);
mKeyguardStatusBar.setBatteryPercentageVisibility(enable);
}
};
状态值改变的地方
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.BATTERY_PERCENTAGE, state);