android 地址选择 服务器数据,Android动态切换服务器地址

需求场景

因独立开发,要对接好几个后台,和测试。而后台的本机地址都不一样,所以要联调的话需要给每个人不同的包。那么如果能在一个已安装的包下,实现切换和修改IP地址就好啦。

但需要注意的是,这个功能是给测试和开发用的,正式上记得把这个功能隐藏掉。

虽然想法很简单,但也踩了几个坑。

1.我项目中的Retrofit2,本想着修改baseurl就万事大吉,经测试,虽然修改了,但是没有生效。因为在程序启动的时候,就已经初始化了Retrofit,而且baseurl已经传入了老的URL。想到了一个办法就是-保存完地址直接重启app。

重启工具类如下

/**

* @作者: xiaodu

* @时间: 2018/11/22

* @描述:重启app

*/

public class RestartAPPTool {

/**

* 重启整个APP

* @param context

* @param Delayed 延迟多少毫秒

*/

public static void restartAPP(Context context, long Delayed){

/**开启一个新的服务,用来重启本APP*/

Intent intent=new Intent(context,KillSelfService.class);

intent.putExtra("PackageName",context.getPackageName());

intent.putExtra("Delayed",Delayed);

context.startService(intent);

/**杀死整个进程**/

android.os.Process.killProcess(android.os.Process.myPid());

}

/***重启整个APP*/

public static void restartAPP(Context context){

restartAPP(context,500);//我们传入500毫秒

}

}

/***

* 该服务只用来让APP重启,生命周期也仅仅是只是重启APP。重启完即自我杀死

* 记得在Manifest文件中添加KillSelfService

*/

public class KillSelfService extends Service {

/**

* 关闭应用后多久重新启动

*/

private static long stopDelayed = 2000;

private Handler handler;

private String PackageName;

public KillSelfService() {

handler = new Handler();

}

@Override

public int onStartCommand(final Intent intent, int flags, int startId) {

stopDelayed = intent.getLongExtra("Delayed", 2000);

PackageName = intent.getStringExtra("PackageName");

handler.postDelayed(new Runnable() {

@Override

public void run() {

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(PackageName);

startActivity(LaunchIntent);

KillSelfService.this.stopSelf();

}

}, stopDelayed);

return super.onStartCommand(intent, flags, startId);

}

@Override

public IBinder onBind(Intent intent) {

return null;

}

}

2.主要的实现代码。

//使用sp记录下来

SPUtils.getInstance("test", MainActivity.this).put("ip", text);

//延时1秒重启app,让sp能保存值

new Handler().postAtTime(new Runnable() {

@Override

public void run() {

//TODO("如果你用的是Retrofit2,不重启ip地址切换不会生效")

//重启app

RestartAPPTool.restartAPP(MainActivity.this);

}

},1000);

至此,动态切换地址已经完成,我把这个功能写在了登录页一个不起眼的位置上,点击3次可出现修改地址的功能。当然您也可以用摇一摇的方式来实现。

最后,附上我的git地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值