当前位置:   article > 正文

Android 时区更改笔记_tvsettings添加网络更新时区

tvsettings添加网络更新时区

时区更改主要就是拿到时区,设置时区这两大功能
主要是 ZoneGetter 这个类:

/frameworks/base/packages/SettingsLib/src/com/android/settingslib/datetime/ZoneGetter.java
位置:/frameworks/base/packages/SettingsLib

但这个类在Android的SDK中是没有引用的,所以要自己导入jar包引入,settingslib 文件夹下使用mm命令编译,但会报测试类的错,原因测试类需要其他的依赖没有导入
在这里插入图片描述
解决办法:不需要测试类直接注释掉其Android.mk文件
在这里插入图片描述
它对应的编译后jar位置是
在这里插入图片描述
导入这个jar包后虽然编译不会报错了,但运行时还会报错,原因是在 ZoneGetter.java 有依赖R
在这里插入图片描述
R正是为了获取时区列表

frameworks/base/packages/SettingsLib/res/xml/timezones.xml

而jar中是不包含资源文件R的,所以运行时会报找不到资源文件的错误。
在这里插入图片描述
怎么导入这些资源文件没有研究了,至少Android studio 中没有报错,看着不难受了,编译的时候在Android.dp中加入SettingsLib的引用即可

include frameworks/base/packages/SettingsLib/common.mk
在这里插入图片描述

获得时区信息

在系统的设置中时区相关的界面是:

TvSettings\Settings\src\com\android\tv\settings\system\TimeZoneFragment.java
在这里插入图片描述
很简单就获取到了时区的列表,ZoneGetter.getZonesList(getActivity());

设置时区

final AlarmManager alarm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarm.setTimeZone(preference.getKey());
在这里插入图片描述
设置也非常的简单,都已经封装好了,在应用层调用 AlarmManager 类中的 setTimeZone(zoneId);即可完成时区设置

时区设置

首先要在AndroidManifest.xml中加入时区相关的权限

<uses-permission android:name="android.permission.SET_TIME_ZONE"
    tools:ignore="ProtectedPermissions"/>
  • 1
  • 2
public class TimeZoneActivity extends Activity{

    private final static String TAG = "TimeZoneFragment";

    private List<Map<String, Object>> zoneList;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 获得系统所有时区信息
        zoneList = ZoneGetter.getZonesList(this);
		
		// 获得当前时区的id
		String currentTimeZone = ZoneId.systemDefault().getId();
        
        for (final Map<String, Object> zone : zoneList) {
            String id = (String) zone.get(ZoneGetter.KEY_ID);
            String displayName = (String) zone.get(ZoneGetter.KEY_DISPLAYNAME);
            String GMT = (String) zone.get(ZoneGetter.KEY_GMT);
            int offset = (Integer) zone.get(ZoneGetter.KEY_OFFSET);

            Log.d("zwt","id::"+id);
            Log.d("zwt","displayName::"+displayName);
            Log.d("zwt","GMT::"+GMT);
            Log.d("zwt","offset::"+offset);
            Log.d("zwt","======================");

        }
        Log.d("zwt","size::"+zoneList.size());
    }

	private void setTimeZone(String timeZoneId){
        AlarmManager alarmManager = mContext.getSystemService(AlarmManager.class);
        alarmManager.setTimeZone(timeZoneId);
        if (timezoneAdapter!=null)
            timezoneAdapter.setCurrentTimezone(timeZoneId);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

设置时区方法传入的是时区的id,就是for循环中的 String id = (String) zone.get(ZoneGetter.KEY_ID);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/294879
推荐阅读
相关标签
  

闽ICP备14008679号