android注册监听白天黑夜切换
时间: 2023-07-24 10:40:57 浏览: 48
要在 Android 中注册监听白天黑夜切换,可以使用 `TimeChangedBroadcastReceiver` 和 `UiModeManager` 两个类。
首先,创建一个 `TimeChangedBroadcastReceiver` 类,继承自 `BroadcastReceiver`,并重写 `onReceive` 方法。在该方法中,获取当前系统时间,并根据时间判断当前是白天还是黑夜。
```java
public class TimeChangedBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获取当前时间
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
// 判断白天还是黑夜
if (hour >= 6 && hour < 18) {
// 白天
setUiMode(context, UiModeManager.MODE_NIGHT_NO);
} else {
// 黑夜
setUiMode(context, UiModeManager.MODE_NIGHT_YES);
}
}
// 设置 UI 模式
private void setUiMode(Context context, int uiMode) {
UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE);
uiModeManager.setNightMode(uiMode);
}
}
```
接下来,在 `AndroidManifest.xml` 中注册广播接收器。
```xml
<receiver android:name=".TimeChangedBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
</intent-filter>
</receiver>
```
最后,在需要监听白天黑夜切换的 Activity 中,注册广播接收器。
```java
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private TimeChangedBroadcastReceiver timeChangedBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册广播接收器
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
timeChangedBroadcastReceiver = new TimeChangedBroadcastReceiver();
registerReceiver(timeChangedBroadcastReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 取消注册广播接收器
unregisterReceiver(timeChangedBroadcastReceiver);
}
}
```
这样,当系统时间发生变化时,广播接收器就会收到通知,并根据当前时间切换为白天或黑夜模式。