Android(Java):http options

本文介绍了一种用于检测软件更新的方法,通过对比本地软件版本与远程服务器上的最新版本来判断是否需要更新。文中详细展示了如何在网络连接正常的情况下从服务器获取版本信息,并通过解析XML文件来读取最新版本号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
  * 检测软件更新
  */
 public void checkUpdate(boolean showAlert, final View v) {
  if(!NetWorkUtil.isNetworkConnected(mContext)){
   new AlertDialog.Builder(mContext).setTitle("提示")
   .setMessage("网络异常,请稍后重试")
   .setPositiveButton("确定", null).show();
   v.setEnabled(true);
   return;
  }
  this.showAlert = showAlert;
  view = v;
  new Thread(){
   public void run(){
    // 获取当前软件版本
    double versionCode = getVersionCode(mContext);
    // 把version.xml放到网络上,然后获取文件信息
    // InputStream inStream =
    // ParseXmlService.class.getClassLoader().getResourceAsStream("version.xml");
    // 解析XML文件。 由于XML文件比较小,因此使用DOM方式进行解析
    ParseXmlService service = new ParseXmlService();
    try {
     URL url = new URL(path);
     HttpURLConnection conn = (HttpURLConnection) url.openConnection();
     conn.setRequestMethod("OPTIONS");
     conn.getResponseCode();
     conn = (HttpURLConnection) url.openConnection();
     conn.setReadTimeout(5 * 1000);
     conn.setRequestMethod("GET");
     InputStream inStream = conn.getInputStream();
     mHashMap = service.parseXml(inStream);
    } catch (Exception e) {
     mHandler.sendEmptyMessage(ERROR);
     Log.e(TAG, e.toString());
     //Toast.makeText(mContext, e.toString(), Toast.LENGTH_LONG).show();
    }
    if (null != mHashMap) {
     serviceCode = Double.valueOf(mHashMap.get("version"));
     name = mHashMap.get("name");
     enforceUpdate = Integer.valueOf(mHashMap.get("enforceUpdate"));
//     if(null!=mHashMap.get("mHashMap"))
//      minimumVersion = Integer.valueOf(mHashMap.get("minimumVersion"));
//      //忽略版本判断
//      if(minimumVersion==-1){
//       return false;
//      }else {
       // 版本判断
       if (serviceCode > versionCode) {
        mHandler.sendEmptyMessage(-1);
        return;
       }
       mHandler.sendEmptyMessage(0);
//      }
    }
     } 
  }.start();
 }
08-04 15:13:41.002 5314 5314 W tek.inputmethod: Accessing hidden method Ldalvik/system/VMRuntime;->setHiddenApiExemptions([Ljava/lang/String;)V (blocked,core-platform-api, reflection, denied) 08-04 15:13:41.286 5352 5352 W utmethod.assist: Accessing hidden method Ldalvik/system/VMRuntime;->setHiddenApiExemptions([Ljava/lang/String;)V (blocked,core-platform-api, reflection, denied) 08-04 15:13:47.672 5471 5735 W ngdong.app.mall: Long monitor contention with owner RunnerWrapper_338 (6150) at void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.Class, java.lang.String)(Runtime.java:1084) waiters=0 in void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.Class, java.lang.String) for 220ms 08-04 15:13:57.146 1750 2440 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: binder:1750_9 08-04 15:13:57.146 1750 2440 E AndroidRuntime: java.lang.StackOverflowError: stack size 991KB 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VPath.<init>(VectorDrawable.java:1638) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VFullPath.<init>(VectorDrawable.java:1898) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VGroup.<init>(VectorDrawable.java:1330) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VectorDrawableState.<init>(VectorDrawable.java:994) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable.<init>(VectorDrawable.java:364) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable.<init>(Unknown Source:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.VectorDrawable$VectorDrawableState.newDrawable(VectorDrawable.java:1085) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.graphics.drawable.Drawable$ConstantState.newDrawable(Drawable.java:1532) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.DrawableCache.getInstance(DrawableCache.java:45) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:658) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.Resources.loadDrawable(Resources.java:1004) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.Resources.getDrawableForDensity(Resources.java:994) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.res.Resources.getDrawable(Resources.java:933) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.content.Context.getDrawable(Context.java:948) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.lambda$updateEnterpriseThumbnailDrawable$0(ActivityRecord.java:645) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.$r8$lambda$365UxoHaJfIpMBzIwgtkcWR0vGE(ActivityRecord.java:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord$$ExternalSyntheticLambda31.get(R8$$SyntheticClass:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.admin.ParcelableResource.loadDefaultDrawable(ParcelableResource.java:275) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.admin.DevicePolicyResourcesManager.getDrawable(DevicePolicyResourcesManager.java:214) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.updateEnterpriseThumbnailDrawable(ActivityRecord.java:643) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.<init>(ActivityRecord.java:2301) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord.<init>(ActivityRecord.java:0) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityRecord$Builder.build(ActivityRecord.java:11354) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1431) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1310) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1261) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1236) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1887) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.ContextImpl.startActivity(ContextImpl.java:1132) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.SplitScreenHelper.startSplitActivities(SplitScreenHelper.java:73) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1475) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1310) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1261) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1236) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1887) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.ContextImpl.startActivity(ContextImpl.java:1132) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.SplitScreenHelper.startSplitActivities(SplitScreenHelper.java:73) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1475) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1310) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1261) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1236) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1887) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at android.app.ContextImpl.startActivity(ContextImpl.java:1132) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.SplitScreenHelper.startSplitActivities(SplitScreenHelper.java:73) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1746) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1475) 08-04 15:13:57.146 1750 2440 E AndroidRuntime: at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:805)这段报错的原因,怎么解决,修改为:public void startSplitActivities(Intent primaryIntent, Intent secondaryIntent,ActivityTaskManagerService atmService) { //public void enterSplitScreen(Activity primary, Activity secondary) { // 创建一个WindowContainerTransaction来执行操作 WindowContainerTransaction wct = new WindowContainerTransaction(); // 创建第一个TaskFragment IBinder fragmentToken1 = new Binder(); //TaskFragment taskFragment1 = mOrganizer.createTaskFragment( // wct, null, fragmentToken1, null); TaskFragment taskFragment1 = new TaskFragment(atmService, fragmentToken1, true, true); // 创建第二个TaskFragment IBinder fragmentToken2 = new Binder(); //TaskFragment taskFragment2 = mOrganizer.createTaskFragment( // wct, null, fragmentToken2, null); TaskFragment taskFragment2 = new TaskFragment(atmService, fragmentToken2, true, true); // 关键修复:获取 WindowContainerToken 的正确方式 WindowContainerToken wcToken1 = taskFragment1.mRemoteToken.toWindowContainerToken();//getOrganizerToken(); WindowContainerToken wcToken2 = taskFragment2.mRemoteToken.toWindowContainerToken();//getOrganizerToken(); // 设置两个TaskFragment为相邻关系 wct.setAdjacentTaskFragments(fragmentToken1, fragmentToken2, null); // 获取屏幕尺寸 int displayWidth = mContext.getResources().getDisplayMetrics().widthPixels; int displayHeight = mContext.getResources().getDisplayMetrics().heightPixels; // 设置第一个TaskFragment在左侧,占据屏幕宽度的一半 Rect bounds1 = new Rect(0, 0, displayWidth / 2, displayHeight); wct.setBounds(wcToken1, bounds1); // 设置第二个TaskFragment在右侧,占据屏幕宽度的一半 Rect bounds2 = new Rect(displayWidth / 2, 0, displayWidth, displayHeight); wct.setBounds(wcToken2, bounds2); // 启动第一个Activity到第一个TaskFragment中 ActivityOptions options1 = ActivityOptions.makeBasic(); options1.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); options1.setLaunchTaskFragmentToken(fragmentToken1); mContext.startActivity(primaryIntent, options1.toBundle()); // 启动第二个Activity到第二个TaskFragment中 ActivityOptions options2 = ActivityOptions.makeBasic(); options2.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); options2.setLaunchTaskFragmentToken(fragmentToken2); mContext.startActivity(secondaryIntent, options2.toBundle()); // 应用事务 //mOrganizer.applyTransaction(wct); mOrganizer.applyTransaction(wct, TaskFragmentOrganizer.TASK_FRAGMENT_TRANSIT_OPEN, false); /* // 获取屏幕尺寸 Display display = primary.getDisplay(); int displayWidth = display.getWidth(); int displayHeight = display.getHeight(); // 创建 WindowContainerTransaction WindowContainerTransaction wct = new WindowContainerTransaction(); // 创建两个 TaskFragment IBinder fragmentToken1 = new android.os.Binder(); IBinder fragmentToken2 = new android.os.Binder(); mOrganizer.createTaskFragment(wct, fragmentToken1, primary.getActivityToken()); mOrganizer.createTaskFragment(wct, fragmentToken2, secondary.getActivityToken()); // 设置边界(左右分屏) Rect bounds1 = new Rect(0, 0, displayWidth / 2, displayHeight); Rect bounds2 = new Rect(displayWidth / 2, 0, displayWidth, displayHeight); wct.setBounds(fragmentToken1, bounds1); wct.setBounds(fragmentToken2, bounds2); // 设置启动选项 ActivityOptions options1 = ActivityOptions.makeBasic(); options1.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); ActivityOptions options2 = ActivityOptions.makeBasic(); options2.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW); // 将 Activity 放入对应的 TaskFragment wct.reparentActivityToTaskFragment(fragmentToken1, primary.getActivityToken()); wct.reparentActivityToTaskFragment(fragmentToken2, secondary.getActivityToken()); // 应用事务 mOrganizer.applyTransaction(wct, TaskFragmentOrganizer.TASK_FRAGMENT_TRANSIT_OPEN, false); */ }
最新发布
08-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值