Android-L SIM卡自适应更新语言问题

前言每次到发布UAT和Release 版本的时候,不同的组件总是出现各种问题,在测试中版本中就没有测试出来,就在今天发布Global(海外)版的时候遇到了一个之前并没发现的问题,就是刷机的rom版本是Global版的,默认的系统语言是英文版的。刚刷完机,插上中国区域的SIM 卡,第一次开机时候,语言自动切换到中文了,由于之前也没这方面经验,对这并不清楚,然后就当BUG 让我修改,后来在网上查了下资料,才了解MTK平台 确实有这么回事,Mark一下~详情如下:     Continue Reading
Xiho's avatar
Xiho Nov 01, 2016
 | 

Android 中取得当前时区(以GMT形式)和语言

国际化需求,要访问当地的时区和语言,作为参数上传服务器处理一些业务,Android手机中如果想以GMT形式(GMT+08:00)得到当前时区,如下的工具类做个记录: /** * 时区语言工具类 * @author Xiho * */ public class I18NUtils { /** * 获取当前时区 * @return */ public static String getCurrentTimeZone() { TimeZone tz = TimeZone.getDefault(); String strTz = tz.getDisplayName(false, TimeZone.SHORT); return strTz; } /** * 获取当前系统语言格式 * @param mContext * @return */ public static String getCurrentLanguage(Context mContext){ Locale locale =mContext.getResources().getConfiguration().locale; String language=locale.getLanguage(); String country = locale.getCountry(); String lc=language+"_"+country; return lc; } }     Continue Reading
Xiho's avatar
Xiho Oct 20, 2016
 | 

android中签名、证书、公钥密钥的概念及使用

资料来源于Android 官方文档:https://developer.android.com/studio/publish/app-signing.html还有些资料来源于网络。加以整理! 公钥和私钥的概念在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是公开密钥算法(也叫非对称算法、双钥算法)”,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。 证书的概念数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥。     Continue Reading
Xiho's avatar
Xiho Sep 02, 2016
 | 

Android 性能检测工具

Android常见问题 内存泄漏:不使用的内存空间(对象)一直被引用着没有得到释放。 内存抖动:短时间内大量创建对象又在短时间内频繁触发GC导致内存波动很大,android虚拟机执行GC操作时需要耗费CPU性能频繁GC会到来严重的性能问题。内存抖动是因为大量的对象被创建又在短时间内马上被释放。瞬间产生大量的对象会严重占用Young Generation的内存区域,当达到阀值,剩余空间不够的时候,也会触发GC。即使每次分配的对象占用了很少的内存,但是他们叠加在一起会增加Heap的压力,从而触发更多其他类型的GC。这个操作有可能会影响到帧率,并使得用户感知到性能问题。 内存溢出:内存泄漏到一定程度超出系统给进程分配的内存大小就会造成内存溢出程序奔溃,或者加载一个或多个大型文件(图片)到内存中也会导致内存溢出。 ANR:应用无响应,代码效率过低或者在主线程执行耗时操作。     Continue Reading
Xiho's avatar
Xiho Jun 27, 2016
 | 

Android 自定义一款炫酷的加载控件

概述:在设计应用的时候,我们应该热爱极简主义,简单就是好的,对于很多用户来说,复杂的东西并不受欢迎。我要实现的是根据不同的情况去显示不同的加载效果,随用随调,效果是借鉴于某一项目的效果,我认为有必要提取出来改善封装一下,供以后使用。情况大致分为:加载中、无网络、无数据、加载失败等;     Continue Reading
Xiho's avatar
Xiho May 13, 2016
 | 

Android 异常退出的生命周期分析

概述:典型的Activity 生命周期众所周知,就不用多说了吧;我们知道,Activity除了受用户操作所导致的正常的生命周期方法调度,还有一些异常情况,比如当资源相关的系统配置发生了改变以及系统内存不足时,Activity就可能被杀死,下面就来具体分析这两种情况。     Continue Reading
Xiho's avatar
Xiho Apr 25, 2016
 | 

Android TextView 实现文字间距

概述:Android系统中TextView默认显示中文时会比较紧凑,不是很美观。为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier。但是有时候我们需要在TextView的文本之间有间距,两个字的话,我们可以在xml文件中,用敲空格的方式来实现,如果有很多文本或者是一个变量的文本呢。我们还这样用敲空格的方式来实现吗?oh no~!如何实现行间距和文本间距呢?(请往下看 ↓)。 1、设置TextView的行间距在TextView控件中添加属性: android:lineSpacingExtra="13dp" //设置行间距 android:lineSpacingMultiplier="1.2" //设置行间距的倍数。如”1.2”     Continue Reading
Xiho's avatar
Xiho Apr 18, 2016
 | 

Android 网络请求库Retrofit简单使用

什么是 Retrofit ?Retrofit是一套 RESTful 架构的 Android(Java)客户端实现,基于注解,提供 JSON to POJO(Plain Ordinary Java Object ,简单Java对象),POJO to JSON,网络请求(POST,GET, PUT,DELETE 等)封装。 既然只是一个网络请求封装库,现在已经有了那么多的大家已经耳熟能详的网络请求封装库了,为什么还要介绍它呢,原因在于 Retrofit 是一套注解形的网络请求封装库,让我们的代码结构更给为清晰。它可以直接解析JSON数据变成JAVA对象,甚至支持回调操作,处理不同的结果。想更详细的了解 Retrofit,可以查看官方文档 。 话不多说,直入主题~~ 一、集成目前我使用的是AndroidStudio,那么在model的build.gradle文件中添加以下引用: compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'     Continue Reading
Xiho's avatar
Xiho Apr 12, 2016
 | 

Android 切换系统语言功能实现(下)

概述:简单介绍下这个需求的缘由,这段时间因公司业务需要,其中有一项“设置系统语言”功能,就是在使用APP的过程中,动态的去切换整个Android机器的语言,具体参照手机设置页面有语言切换功能。期初想来是很简单的事情嘛,不就是个简单的资源国际化嘛,strings.xml资源文件一整还不给OK?真正动起手来就真不是这么一回事了,国际化是没问题,但是怎样能更改所有页面的文字资源呢,这是一个问题。下面介绍下网上找的几个方案。 一、API欺骗 烧制到手机中的android.jar包含了Android所需的各种类与方法;而供开发者使用的android.jar只是其中的一部分。API欺骗是指在应用中去模拟未公开的类和方法让应用编译通过并生成APK,然而在应用实际运行中调用的却仍是烧制到手机中真实的android.jar。 二、使用Java反射机制IActivityManager与ActivityManagerNative都是非公开类,使用Java反射去调用其中的方法。 但是这个弊端是显而易见的,上述两种方法都是去更改系统的语言的类型,功能和你去设置页面去设置语言类型的效果一样。发现对当前系统设置了新的Locale后,不单自己的应用语系改变了,系统所有的应用语系都改变了,这正是我们所需要的。折腾了下下这个很2的问题。网上放的方法比较旧, Android5.1的话, 设置后当时生效, 重启后就失效了。     Continue Reading
Xiho's avatar
Xiho Apr 12, 2016
 | 

Android 切换系统语言源码分析(上)

概述:以前了解Android的多语言实现很简单,可以在不同的语言环境下使用不同的资源,就做好相应的语言适配就好,但是一直没有实际使用过。 最近公司的项目要用到多国语言切换,并且还是和手机上系统设置里面的语言切换功能一样,于是就上网查了下资料。一般都是在应用类实现多国语言切换,这个是很简单。而我想切换整个系统的语言。由于谷歌没有把系统设置里面的接口给开放出来,所以就只好去查看它的源码了~ android语言切换是在: packages/apps/Settings/com/android/settings/LocalePicker.java 的updateLocale()函数中调用,源码如下: /** * Requests the system to update the system locale. Note that the system looks halted for a while during the Locale migration, so the caller need to take care of it. */ public static void updateLocale(Locale locale) { try { IActivityManager am = ActivityManagerNative.getDefault(); Configuration config = am.getConfiguration(); config.locale = locale; // indicate this isn't some passing default - the user wants this remembered config.userSetLocale = true; am.updateConfiguration(config); // Trigger the dirty bit for the Settings Provider. BackupManager.dataChanged("com.android.providers.settings"); } catch (RemoteException e) { // Intentionally left blank } }     Continue Reading
Xiho's avatar
Xiho Apr 12, 2016
 |