我有一个Android应用程序。每当用户更改设备时区时,我都希望事件监听器通知我?我怎么能完成它?
答案 0 :(得分:3)
使用以下意图过滤器注册接收器
filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
filter.addAction(Intent.ACTION_TIME_CHANGED);
并将其注册到您活动的OnCreate
public void onCreate() {
super.onCreate();
registerReceiver(receiver, filter);
}
按如下方式创建广播接收器。
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_TIME_CHANGED) ||
action.equals(Intent.ACTION_TIMEZONE_CHANGED))
{
doWorkSon();
}
}
};
并在您的活动的onDestroy
中取消注册:
public void onDestroy() {
super.onDestroy();
unregisterReceiver(m_timeChangedReceiver);
}
答案 1 :(得分:0)
您需要为意图操作ACTION_TIMEZONE_CHANGED创建一个BroadcastReceiver。 BroadcastReceiver被描述为here。
答案 2 :(得分:0)
在清单文件中
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.TIMEZONE_CHANGED"/>
</intent-filter>
</receiver>
在 myReceiver 类中
override fun onReceive(context: Context, intent: Intent) {
var action : String? = intent.action
var timeZone: String? = intent.getStringExtra("time-zone")
Toast.makeText(context,action+timeZone,Toast.LENGTH_LONG).show()