精华内容
下载资源
问答
  • SVN提交更新,Jenkins无法检测到最新版本 如题,在使用Jenkins执行构建时,发现SVN提交更新后,最新版本号为15,但是Jenkins Check out后版本号却是13,不是最新版本。 分析后发现是Jenkins服务器的时间与SVN...

    SVN提交更新,Jenkins无法检测到最新版本


    如题,在使用Jenkins执行构建时,发现SVN提交更新后,最新版本号为15,但是Jenkins Check out后版本号却是13,不是最新版本。

    分析后发现是Jenkins服务器的时间与SVN服务器时间不一致造成的,Jenkins比SVN服务器时间早十几分钟,而Jenkins中的SVN插件是按照时间戳来更新代码的。

    也就是说Jenkins在 10:56 更新代码,而SVN上14、15版都是在 10:56 后提交的,所以Jenkins只能检测到 10:56 之前的最新版本。

    解决方案


    针对上面的问题,有两种解决方案:

        在SVN URL后面加上@HEAD后缀,表明更新版本库中最新版本

        同步Jenkins和SVN服务器的时间,使两者保持一致
     

    展开全文
  • 用它来通知页面上已经有新版本的用户。 兼容性 Ember.js v3.16或更高版本 Ember CLI v2.13或更高版本 Node.js v10或更高版本 用法 像添加其他任何附件一样添加此附件: > ember install ember-cli-new-version 将...
  • // 更新下载进度事件 ***** 系统先是 update-available 检测到新版本 **** download-progress 这里没有执行就停止了 autoUpdater.on('download-progress', function (progressObj) { console.log("download-...
  • app现在基本都有版本更新这个功能,实现起来也很简单 截图效果: 1. 获取当前app的版本号 /** * 获取版本号 * * @throws PackageManager.NameNotFoundException */ public static String ...

    app现在基本都有版本更新这个功能,实现起来也很简单

    截图效果:


    1. 获取当前app的版本号

    /**
         * 获取版本号
         *
         * @throws PackageManager.NameNotFoundException
         */
        public static String getVersionName(Context context) throws PackageManager.NameNotFoundException {
            // 获取packagemanager的实例
            PackageManager packageManager = context.getPackageManager();
            // getPackageName()是你当前类的包名,0代表是获取版本信息
            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            String version = packInfo.versionName;
            return version;
        }
    
    2.根据版本号名称判断版本高低

      /**
         * 版本号比较
         *0代表相等,1代表version1大于version2,-1代表version1小于version2
         * @param version1
         * @param version2
         * @return
         */
        public static int compareVersion(String version1, String version2) {
            if (version1.equals(version2)) {
                return 0;
            }
            String[] version1Array = version1.split("\\.");
            String[] version2Array = version2.split("\\.");
            int index = 0;
            // 获取最小长度值
            int minLen = Math.min(version1Array.length, version2Array.length);
            int diff = 0;
            // 循环判断每位的大小
            while (index < minLen
                    && (diff = Integer.parseInt(version1Array[index])
                    - Integer.parseInt(version2Array[index])) == 0) {
                index++;
            }
            if (diff == 0) {
                // 如果位数不一致,比较多余位数
                for (int i = index; i < version1Array.length; i++) {
                    if (Integer.parseInt(version1Array[i]) > 0) {
                        return 1;
                    }
                }
    
                for (int i = index; i < version2Array.length; i++) {
                    if (Integer.parseInt(version2Array[i]) > 0) {
                        return -1;
                    }
                }
                return 0;
            } else {
                return diff > 0 ? 1 : -1;
            }
        }
    3.从服务器获取最新版本号

    /**
         * 从服务器获取版本最新的版本信息
         */
        private void getVersionInfoFromServer(){
            //模拟从服务器获取信息  模拟更新王者荣耀
            versionInfoBean = new VersionInfoBean("1.1.1","http://dlied5.myapp.com/myapp/1104466820/sgame/2017_com.tencent.tmgp.sgame_h162_1.33.1.8_9c4c7f.apk","1.修复若干bug\n\n2.新增图片编辑功能"
            ,getExternalCacheDir()+"/1.1.1.jpg");
            SharedPreferences sharedPreferences = getSharedPreferences("data",MODE_PRIVATE);
            sharedPreferences.edit().putString("url",versionInfoBean.getDownloadUrl()).commit();
            sharedPreferences.edit().putString("path",versionInfoBean.getPath()).commit();//getExternalCacheDir获取到的路径 为系统为app分配的内存 卸载app后 该目录下的资源也会删除
            //比较版本信息
            try {
                int result = Utils.compareVersion(Utils.getVersionName(this),versionInfoBean.getVersionName());
                if(result==-1){//不是最新版本
                    showDialog();
                }else{
                    Toast.makeText(MainActivity.this,"已经是最新版本",Toast.LENGTH_SHORT).show();
                }
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
    
        }

    4.弹出dialog提示更新

     private  void showDialog(){
            final Dialog dialog = new Dialog(MainActivity.this);
            LayoutInflater inflater = (LayoutInflater)MainActivity.this
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            TextView version,content;
            Button    left,right;
            View view = inflater.inflate(R.layout.version_update,null,false);
            version = (TextView)view.findViewById(R.id.version);
            content = (TextView)view.findViewById(R.id.content);
            left = (Button)view.findViewById(R.id.left);
            right = (Button)view.findViewById(R.id.right);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                content.setText(Html.fromHtml(versionInfoBean.getDesc(),Html.FROM_HTML_MODE_LEGACY));
            }else{
                content.setText(Html.fromHtml(versionInfoBean.getDesc()));
            }
            content.setMovementMethod(LinkMovementMethod.getInstance());
            version.setText("版本号:"+versionInfoBean.getVersionName());
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            left.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dialog.dismiss();
                }
            });
            right.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dialog.dismiss();
                        downloadNewVersionFromServer();
    
                }
            });
            dialog.setContentView(view);
            dialog.setCancelable(false);
            Window dialogWindow = dialog.getWindow();
            dialogWindow.setGravity(Gravity.CENTER);
            //dialogWindow.setWindowAnimations(R.style.ActionSheetDialogAnimation);
            WindowManager.LayoutParams lp = dialogWindow.getAttributes();
            WindowManager wm = (WindowManager)
                    getSystemService(Context.WINDOW_SERVICE);
            lp.width =wm.getDefaultDisplay().getWidth()/10*9;
            dialogWindow.setAttributes(lp);
            dialog.show();
        }

    5.启动service后台下载

     /**
         * 启动服务后台下载
         */
        private void downloadNewVersionFromServer(){
            if(new File(versionInfoBean.getPath()).exists()){
                new File(versionInfoBean.getPath()).delete();
            }
            Toast.makeText(MainActivity.this,"开始下载...",Toast.LENGTH_SHORT).show();
                LoadingService.startUploadImg(this);
        }

    6.定义广播接受者接受下载状态

    声明变量isLoading表示下载状态

    /**
         * 定义广播接收者 接受下载状态
         */
        public class MyReceive extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
               if("android.intent.action.loading_over".equals(action)){
                    isLoading = false;
                }else if("android.intent.action.loading".equals(action)){
                    isLoading = true;
                }
            }
        }
    7.创造service

    public class LoadingService extends IntentService {
        private HttpUtils httpUtils;
        NotificationManager nm;
        private String url,path;
        private SharedPreferences sharedPreferences;
        public LoadingService(String name) {
            super(name);
        }
        public LoadingService() {
            super("MyService");
    
        }
    
    
        public static void startUploadImg(Context context)
        {
            Intent intent = new Intent(context, LoadingService.class);
            context.startService(intent);
        }
    
    
    
        public void onCreate() {
            super.onCreate();
            httpUtils = new HttpUtils();
            httpUtils.configCurrentHttpCacheExpiry(0);
            nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            sharedPreferences = getSharedPreferences("data",MODE_PRIVATE);
        }
    
    
    
        @Override
        protected void onHandleIntent(@Nullable Intent intent) {
            updateApk();
        }
    
    
    
    
    //开始下载apk  网络请求使用的是xutils框架
        private void updateApk(){
            url = sharedPreferences.getString("url","");
            path = sharedPreferences.getString("path","");
    
            httpUtils.download(url,
                    path , new RequestCallBack<File>() {
                        @Override
                        public void onLoading(final long total, final long current,
                                              boolean isUploading) {
                            createNotification(total,current);
                            sendBroadcast(new Intent().setAction("android.intent.action.loading"));//发送正在下载的广播
                            super.onLoading(total, current, isUploading);
                        }
    
                        @Override
                        public void onSuccess(ResponseInfo<File> arg0) {
                            nm.cancel(R.layout.notification_item);
                            Toast.makeText(LoadingService.this,"下载成功...",Toast.LENGTH_SHORT).show();
                            installApk();//下载成功 打开安装界面
                            stopSelf();//结束服务
                            sendBroadcast(new Intent().setAction("android.intent.action.loading_over"));//发送下载结束的广播
                        }
    
                        @Override
                        public void onFailure(HttpException arg0, String arg1) {
                            Toast.makeText(LoadingService.this,"下载失败...",Toast.LENGTH_SHORT).show();
                            sendBroadcast(new Intent().setAction("android.intent.action.loading_over"));//发送下载结束的广播
                            nm.cancel(R.layout.notification_item);
                            stopSelf();
                        }
                    });
        }
        /**
         * 安装下载的新版本
         */
        protected void installApk() {
            Intent intent = new Intent();
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            File file = new File(path);
            Uri uri = Uri.fromFile(file);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setDataAndType(uri, "application/vnd.android.package-archive");
            this.startActivity(intent);
        }
    //发送通知 实时更新通知栏下载进度
        private void createNotification(final long total, final long current){
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setSmallIcon(R.mipmap.ic_launcher);//必须要设置这个属性,否则不显示
            RemoteViews contentView = new RemoteViews(this.getPackageName(),R.layout.notification_item);
            contentView.setProgressBar(R.id.progress, (int)total, (int)current, false);
            builder.setOngoing(true);//设置左右滑动不能删除
            Notification notification  = builder.build();
            notification.contentView = contentView;
            nm.notify(R.layout.notification_item,notification);//发送通知
        }
    ok 大功告成 demo地址:点击打开链接

    展开全文
  • Android Studio Check for Updates检测发现不到新版本问题解决 File - Settings - Appearance & Behavior - System Settings - Updates 右侧面板的: View/edit ignored updates 点击打开,把里面的内容全部...

    Android Studio Check for Updates检测发现不到新版本问题解决

    File - Settings - Appearance & Behavior - System Settings - Updates 
    右侧面板的:
    View/edit ignored updates
    点击打开,把里面的内容全部删除,然后OK。就可以检测到新版Android Studio。

    展开全文
  • Android Studio检测到新版本问题解决

    千次阅读 2018-08-09 15:48:18
    Android Studio无法检测新版本问题解决 大家都知道Android Studio可以直接在“Menu - Check for Updates…”自动检测并更新版本,还可以在弹出的检查框中点击”Updates”dialog设置更新的配置,如图: 问题: ...

    Android Studio无法检测新版本问题解决

    大家都知道Android Studio可以直接在“Menu - Check for Updates…”自动检测并更新版本,还可以在弹出的检查框中点击”Updates”dialog设置更新的配置,如图:

    image.png

    问题:

    但是今天发现个奇怪的现象:我目前的as版本为3.0.1,但是官方稳定版已经更新到3.1.4,点击Check for Updates更新,却告诉我已经是最新版本了…

    image.png

    解决:

    出Bug了么?并不是,原因是不知什么时候更新提示框出来后,手残点击了“忽略更新”,所以就把目前的3.1.4给忽略了,删除忽略记录即可:

    - Preferences -- 搜索Updates -- View/edit ignored updates
    - 删除对应的版本记录即可
    - 重新Check for Updates

    image.png

    如上图,忽略记录里的173.4907809即3.1.4的versioncode。

    image.png

    附:

    更新配置的几个选项说明:
    - Canary Channel:金丝雀版本,开放新功能,bug比较多。想第一时间尝鲜的开发人员可以选择这个渠道;
    - Dev Channel:开发者版本,到了这个版本很多 BUG 已经得到了解决;
    - Beta Channel:测试版,BUG 出现概率相对较小;
    - Stable Channel:稳定版,官方发布的正式版,发布日期较晚。这是 Android Studio 默认的更新设置,也是大多数开发人员青睐使用的版本。

    更多博客,请关注
    - https://blog.csdn.net/rflyee/
    - https://www.jianshu.com/u/ff8bcd76e5a7

    展开全文
  • iOS子线程操作检测版本更新,有新版本通知用户更新 CheckVersion 一:如何使用: #import "CheckVersion.h" //输入你的app在appStore的 id ...上述代码写完就可以了,当用户打开app检测到新版本时,为
  • Check for Updates...”自动检测并更新版本,还可以在弹出的检查框中点击"Updates"dialog设置更新的配置,如图:问题:但是今天发现个奇怪的现象:我目前的as版本为3.0.1,但是官方稳定版已经更新3.1.4,点击...
  • 大家都知道Android Studio可以直接在“Menu – Check for Updates…”自动检测并更新版本,还可以在弹出的检查框中点击”Updates”dialog设置更新的配置,如图: 问题: 但是今天发现个奇怪的现象:我目前的as版本...
  • <div><p>win7 Waterfox Classic x64 如图所示,点击更新之后就显示“无法获取下载地址” ;无法获取下载地址" src=...EhTagTranslation/EhSyringe</p></div>
  • 微信小程序新版本发布之后,用户使用依然是旧版本,这是因为在微信中有旧版本的缓存,不会及时更新到新版本。要想让用户更新到新版本,可以通过提示用户在微信中的“发现 - 小程序”入口中将旧版小程序删除,然后再...
  • 通过此操作,您可以基于两次提交之间库内容的某些更改来检测存储库的新版本,并在检测到新版本时创建git标签。 例如,在一个JavaScript库中,您可以检测到package.json中的version字段已从"1.0.0"更改为"1.1.0" ,...
  • 如果检测到有老版本存在就先卸载老版本才形始的安装过程,写了如下代码 QUOTE Function .onInit ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "InstallDir" ${If} $0 == ""; MessageBox MB_ICONINFORMATION|MB_...
  • ios检测新版本并更新

    2015-02-02 16:32:58
    //检查版本更新 //APPLEID 是提交appstore的应用id -(void)onCheckVersion {  NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];   NSString *currentVersion = [infoDic objectForKey:@...
  • 微信小程序开发过程中,我们在版本迭代后,客户端并不能触发这个自动更新,需要清掉小程序后重新搜索进入才能获取最新的小程序,但这个是用户所不能感知的操作,故需要提醒用户如何去get最新的版本: ...
  • 版本检测的小bug

    2021-01-08 19:53:58
    今天首次开启浏览器时助手显示“检测到新版本 0.9.9” 的通知, 在到官网确认后发现官网并未更新版本信息, 点击安装按钮的话弹出失败提示。 在Chrome商店的版本则是最新版,无此问题。 环境...
  • 检测过时的浏览器并建议用户升级到新版本。 处理移动设备! 这是的过时浏览器的分支,添加了许多新功能,包括: 明确的浏览器版本支持 移动浏览器支持 边缘支持 大幅减少尺寸 更多翻译 自定义升级消息 未缩小的...
  • 做个网站的安卓客户端,用户安装自己手机上,如果我出了新版本怎么办呢?要有版本更新功能。 本来版本检测最好可以自动进行。但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情。或许...
  • 每个程序都会随着时间的推移更新新的版本,下面来介绍一下检测到新版本并提示更新 思路:首先检测当前版本是否是最近版本,是无需任何操作,不是,就需要下载新的程序版本替换旧版本,并安装(大概就是这么个思路...
  • 通过UserDefault来实现版本更新,版本检测,即如果更新新版本,用户第一次运行,播放介绍全新特性的界面 代码如下: 在appdelete.m didFinishLaunchingWithOptions方法中添加- (BOOL)application:...
  • 在/head 和body之间 增加相关代码 ***** IE浏览器在本页面的显示效果可能有差异。建议您直接往下拉或者升级到新版本
  • 方法一:==========================================...步骤如下:首先 在APP.XML设置你的当前程序版本大概在第26,27行: An application version designator (such as "v1", "2.5", or "Alpha 1"). Requ

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,634
精华内容 1,453
关键字:

检测到新版本