在手机应用的实现中经常会遇到需要语言切换用于满足用户环境的多样性。可以根据所处地理位置信息进行经纬度及国家/城市/地区的获取,可以根据此内容进行多语言情况的推荐及切换。
完成上述的想法需要进行几个功能的开发:
- 需要通过手机进行地理位置信息获取
- 需要根据地理位置信息进行多语言内容的推荐
- 需要将应用内的多语言进行切换
1. 进行地理位置信息获取及地理位置上传至后台
地理位置信息获取包含了以下几个功能:
-
进行GPS权限的获取,此操作需要在初始进行应用时进行请求。避免无法请求地理位置信息导致无法获取地理位置信息(initPermission方法)。
获取权限分为了两个部分,分别为检查是否已经获取了权限,以及第二部分的权限获取。若当前未获得对应权限则需要进行权限申请。在mainActivity中初始化时进行权限申请,进入主页面后会弹出以下申请:
-
进行地理位置信息获取,在代码中可以设置进行地理位置获取的时间阈值和地理距离阈值,从而调整获取地理位置信息的频率。(updateLocationData方法)。
可以通过以下两个参数进行获取地理位置信息频率的调整,根据自身应用的情况进行地理位置的获取,但是一般不允许均设置为0,实时获取可能会涉及代码合规问题:
-
进行地理位置信息的上传,客户端编写地理位置信息处理逻辑,之后再将语言推荐信息以回调的形式返回本地客户端(upLoadLocationData方法)。
采用retrofit进行网络交互,根据是否存在回调(callback)进行消息上传后的逻辑处理。
class UpdateLocationData(val mainActivity: BaseActivity) {
private val tvLocation: TextView? = null
var tvAddress: String? = null
var locationCity: String? = null
private var geocoder: Geocoder? = null
private var addressList: ArrayList<Address>? = null
private val TAG = "FragmentActivity"
var mlocation = LocationInfo()
//初始化经纬度,用于返回地理位置信息
var latitude: Double = 0.0
var longitude: Double = 0.0
// 1 获取位置管理者对象
private var lm: LocationManager =
mainActivity.getSystemService(Context.LOCATION_SERVICE) as LocationManager
fun initPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//检查权限
if (ActivityCompat.checkSelfPermission(
mainActivity,
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission