精华内容
下载资源
问答
  • 手机版本更新

    2014-05-18 21:14:11
    这是用于版本更新的操作,里面有代码,可以用于手机版本的更新操作!
  • EasyTrack手机APP最新版本已在各大应用市场全面上线,新版本增加“ALM—开发”功能,支持在手机上对应用开发生命周期的管理。 以下为EasyTrack手机APP新版本的功能和亮点介绍: 一、工作项看板可拖拽、编辑 在...

    EasyTrack手机APP最新版本已在各大应用市场全面上线,新版本增加“ALM—开发”功能,支持在手机上对应用开发生命周期的管理。

    以下为EasyTrack手机APP新版本的功能和亮点介绍:

    一、工作项看板可拖拽、编辑

    在“看板”中,项目成员可以左右移动屏幕,切换查看每个故事泳道下的用户故事;长按可拖拽用户故事,点击可编辑。

    二、支持敏捷、迭代、瀑布三种开发模式

    EasyTrack支持敏捷、迭代、瀑布三种开发模式,在网页端对项目的开发模式进行设置后,手机APP也会根据相应的模式进行板块的变动。

    图为手机APP上敏捷型开发模式下的路线图,可以查看发布计划下面的迭代计划,以及分属于每个迭代计划下面的用户故事:

    三、全方位记录和跟踪缺陷

    EasyTrack手机版支持查看和跟踪开发过程中存在的缺陷,点击单个缺陷可详细查看该缺陷的相关信息,手机上同样可以对缺陷进行编辑处理。

    四、体验方式

    扫描下方二维码,可申请试用账号,试用账号支持网页端和手机端的登录;手机APP可在各大应用商城下载体验,ios及android都可使用。

     

    展开全文
  • Android手机版本更新,使用okhttp网络框架进行网络请求和文件下载操作,使用Handler线程处理progress进度的实时更新,下载之后用户进行选择安装新版本,点击手机返回键或者对话框取消按钮取消文件下载,代码简单易懂...
  • //版本更新的监听事件 check .setOnClickListener( this ); //设置sdcard的根路径 if (Environment. getExternalStorageState ().equals(Environment. MEDIA_MOUNTED )) { File file = Environment. ...

    1.添加依赖:

    compile 'org.xutils:xutils:3.5.0'
    compile 'com.google.code.gson:gson:2.8.1'
    
    2.初始化xutils
    
    
    public class BaseApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            x.Ext.init(this);
            x.Ext.setDebug(BuildConfig.DEBUG);
        }
    }

    3.定义一个获取version的工具类:


    public class VersionUtils {
    
        /**
         * 获取应用的版本
         */
    
        public static int getVersionCode(Context context) {
            int versionCode = 0;
            try {
                PackageManager packageManager = context.getPackageManager();
                String packageName = context.getPackageName();
                PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
                versionCode = packageInfo.versionCode;
    
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            return versionCode;
        }
    }
    
    4.Bean类
    
    
    public class MessageBean<T> {
        private boolean success;
        private String message;
        private T result;
    
        public boolean isSuccess() {
            return success;
        }
    
        public void setSuccess(boolean success) {
            this.success = success;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public T getResult() {
            return result;
        }
    
        public void setResult(T result) {
            this.result = result;
        }
    }
    

    =====================================

    public class Version {
        @SerializedName("has_new_version")
        private boolean hasNewVersion;
        @SerializedName("must_update")
        private boolean mustUpdate;
        private String url;
    
        public boolean isHasNewVersion() {
            return hasNewVersion;
        }
    
        public void setHasNewVersion(boolean hasNewVersion) {
            this.hasNewVersion = hasNewVersion;
        }
    
        public boolean isMustUpdate() {
            return mustUpdate;
        }
    
        public void setMustUpdate(boolean mustUpdate) {
            this.mustUpdate = mustUpdate;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    }
    


    5.MainActivity 页面代码


    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button check;
        private String url="http://172.18.47.57/checkversion.php";
        private static final String TAG = "MainActivity";
        private ProgressDialog progressDialog;
        // 文件保存地址
        private String targetPath = "";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            x.view().inject(this);
    
            check= (Button) findViewById(R.id.btn_check_version);
            //版本更新的监听事件
            check.setOnClickListener(this);
    
            //设置sdcard的根路径
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                File file = Environment.getExternalStorageDirectory();
                targetPath = file.getAbsolutePath() + File.separator;
            }
    
            progressDialog = new ProgressDialog(this);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    
        }
    
        @Override
        public void onClick(View v) {
    
            //检查版本号
            checkVersion();
        }
    
        private void checkVersion() {
    
            //获得自己app当前的版本号,用来和服务器的版本进行对比
           final  int code = VersionUtils.getVersionCode(this);
    
            RequestParams params=new RequestParams(url);
            params.addQueryStringParameter("version",String.valueOf(code));
    
            x.http().get(params, new Callback.CommonCallback<String>() {
    
                @Override
                public void onSuccess(String result) {
    
                    if (result!=null){
                        Log.i(TAG, "onSuccess: " + result);
                        Gson gson = new Gson();
                        Type type = new TypeToken<MessageBean<Version>>() {
                        }.getType();
    
                        MessageBean<Version> messageBean = gson.fromJson(result, type);
                        if (messageBean.isSuccess()){
                         final   Version version = messageBean.getResult();
                            //强制更新
                            if(version.isMustUpdate()){
                               //强制更新
                               new AlertDialog.Builder(MainActivity.this)
                                       .setTitle("版本更新")
                                       .setMessage("强制更新到最新版本!")
                                       .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                           @Override
                                           public void onClick(DialogInterface dialog, int which) {
                                               updateVersion(version.getUrl());
                                               dialog.dismiss();
                                           }
                                       })
                                       //不可取消
                                       .setCancelable(false)
                                       .create().show();
    
                            }else if(version.isHasNewVersion()){
                                //选择更新
                                new AlertDialog.Builder(MainActivity.this)
                                        .setTitle("版本更新")
                                        .setMessage("是否要升级到最新版本")
                                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {
                                                updateVersion(version.getUrl());
                                                dialog.dismiss();
                                            }
                                        })
                                        .setNegativeButton("下次再说", new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {
                                                dialog.dismiss();
                                            }
                                        })
                                        .create().show();
                            }else{
    
                                //无可用更新
                                Toast.makeText(MainActivity.this, "当前已经是最新版本", Toast.LENGTH_SHORT).show();
                            }
    
                        }
    
                    }
                }
    
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
    
                }
    
                @Override
                public void onCancelled(CancelledException cex) {
    
                }
    
                @Override
                public void onFinished() {
    
                }
            });
    
        }
    
        private void updateVersion(String url) {
            //下载的app文件名:当前时间.apk
            targetPath = targetPath + System.currentTimeMillis() + ".apk";
            RequestParams params = new RequestParams(url);
            // 设置下载保存路径
            params.setSaveFilePath(targetPath);
            // xutils的文件下载
            x.http().get(params, new Callback.ProgressCallback<File>() {
                @Override
                public void onSuccess(File result) {
                    if (progressDialog.isShowing()) {
                        progressDialog.dismiss();
                    }
    
                    //自动安装app的方法
                    installApk(result);
                }
    
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
                    if (progressDialog.isShowing()) {
                        progressDialog.dismiss();
                    }
                    Toast.makeText(MainActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onCancelled(CancelledException cex) {
    
                }
    
                @Override
                public void onFinished() {
    
                }
    
                @Override
                public void onWaiting() {
    
                }
    
                @Override
                public void onStarted() {
    
                }
    
                @Override
                public void onLoading(long total, long current, boolean isDownloading) {
                    if (isDownloading) {
                        progressDialog.setMessage("正在下载...");
                        progressDialog.show();
                        progressDialog.setMax((int) total);
                        progressDialog.setProgress((int) current);
                    }
                }
            });
    
        }
    
        private void installApk(File file) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addCategory("android.intent.category.DEFAULT");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
            startActivity(intent);
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    
    }
    




    展开全文
  • iOS手机系统升级之后,Xcode没有升级,便不能进行真机测试,原因是老的Xcode中没有手机新系统的配置文件,...这个时候你会发现Xcode也有新版本更新,多数人会选择更新,但是比较坑的是,在更新Xcode的时候,Xcode不能

         iOS手机系统升级之后,Xcode没有升级,便不能进行真机测试,原因是老的Xcode中没有手机新系统的配置文件,因为老的Xcode版本出的时候,还没有新版手机系统。(比如,我Xcode8.2.1版本,就没有iOS10.3.1的配置文件,那么我的Xcode就不能再我的手机上运行程序)

    这个时候你会发现Xcode也有新版本更新,多数人会选择更新,但是比较坑的是,在更新Xcode的时候,Xcode不能打开,如果你项目赶得紧就尴尬了。更尴尬的是,更新速度无比的慢,简直是坑啊,这个时候怎么办,怎么办???

    莫着急,上面已经讲到了,不能运行时因为没有最近手机系统的配置文件,那么我们找一个配置文件放进去就好了。

    1)下载配置文件,在下面这个链接中搜索你要的版本号

        http://download.csdn.net/search/21006

    2)下载完之后,将配置文件放到这里

    	3)重新运行就好了,如果还是不好,重启Xcode运行。

    展开全文
  • 版本更新

    2019-07-17 14:21:08
    App一个必要的功能就是 版本更新 ,它有好多种实现方法,比如:腾讯的bugly、蒲公英等,我们也可以自己动手实现。 遇到的坑 bugly:文档上写着默认3s,有时候会延迟弹框十分钟左右,会有一种集成失败的假象。 ...

    App一个必要的功能就是 版本更新 ,它有好多种实现方法,比如:腾讯的bugly、蒲公英等,我们也可以自己动手实现。

    遇到的坑

    bugly:文档上写着默认3s,有时候会延迟弹框十分钟左右,会有一种集成失败的假象。

    动手

    下面就是我自己写的一种实现方式,调用Android手机原生的下载管理器去下载。

    思路

    1.网络请求拿到最新版本号

    2.获取当前版本号,比较版本号,如果服务器上的版本号比当前版本号大,弹框。

    3.点击下载,调用下载工具类传入阿里应用分发平台给的地址。

    代码

    public class DownloadManagerUtils {
        public static void DownloadManagerUtils(Context context, Uri uri){
            DownloadManager.Request req = new DownloadManager.Request(uri);
            //下载 网络环境
            req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
            req.setVisibleInDownloadsUi(true);
            //通知栏里显示下载过程
            req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            //下载路径
            req.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, "xxx.APK");
            //SD卡路径
    //        req.setDestinationInExternalPublicDir("xxx", "xxx.apk");
    
            // 设置一些基本显示信息
            req.setTitle("xxx.apk");
            req.setDescription("下载完后请点击打开");
            req.setMimeType("application/vnd.android.package-archive");
            // Ok go!
            DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
            long downloadId = dm.enqueue(req);
    
            SharedPreferences sp = context.getSharedPreferences("info",MODE_PRIVATE);
            sp.edit().putLong("downloadId",downloadId).commit();
    
            DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);
            Cursor c = dm.query(query);
            if (c != null) {
                if (c.moveToFirst()) {
                    int status = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS));
                    switch (status){
                        case DownloadManager.STATUS_PENDING:
                            //下载中
                            Toast.makeText(context,"正在更新,请稍等!",Toast.LENGTH_SHORT).show();
                            break;
                        case DownloadManager.STATUS_PAUSED:
                            //暂停中
                            break;
                        case DownloadManager.STATUS_RUNNING:
                            Toast.makeText(context,"正在更新,请稍等!",Toast.LENGTH_SHORT).show();
                            break;
                        case DownloadManager.STATUS_SUCCESSFUL:
                            if(Build.VERSION.SDK_INT>=24){
                                Intent install = new Intent(Intent.ACTION_VIEW);
                                install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//添加这一句表示对目标应用临时授权该Uri所代表的文件
                                install.setDataAndType(dm.getUriForDownloadedFile(downloadId), "application/vnd.android.package-archive");
                                context.startActivity(install);
                            }else{
                                Intent intent = new Intent(Intent.ACTION_VIEW);
                                intent.setDataAndType(dm.getUriForDownloadedFile(downloadId),"application/vnd.android.package-archive");
                                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                context.startActivity(intent);
                            }
    
                            //下载完成
                            break;
                        case DownloadManager.STATUS_FAILED:
                            //下载失败
                            break;
                    }
                }
                c.close();
            }
        }
    }

    效果

    马马虎虎 希望可以帮助到您!

     

    展开全文
  • 随着Android7.0的到来,随之,权限获取也随之更改,因为部分7.0手机就会出现无法下载乃至加载完成后无法安全或者安装失败的问题,因为,我们适配7.0版本是很重要的,不然部分7.0手机就会出现上述问题。 在api23版本...
  • 直接上代码 这里需要网络权限和存储权限 INTERNET WRITE_EXTERNAL_STORAGE ...//获取当前版本号 private String getVersion() { PackageManager pm = this.getPackageManager(); try { PackageInfo pack...
  • 而且我发现在android8.0中除了一些bug,比如说:在小米6(Android 8.0系统)中无法自动安装的问题,那么之前做的更新系统就要稍微调整下。  那根据android 8.0我们重新理一下更新的思路:  1、写一个接口调用是....
  • iOS 版本更新

    2017-12-14 09:47:33
    思路:通过获取appStore已上传的版本版本号与手机当前该软件的plist文件中版本号对比来判断是否更新版本 直接上代码: /**提示更新*/ - (void)upData { //获取手机程序的版本号 NSString *ver = [[[NSBundle...
  • 1.添加file_paths.xml文件,文件内容在图下 <?xml version="1.0" encoding="utf-8"?> <paths> <external-path name="files" path="." /> </paths> 2.添加清单文件的......
  • android版本更新

    2014-02-21 14:17:59
    下面介绍版本更新 版本更新当然少不了服务器端的支持 首先是服务器端的版本更新的检测文件是xml格式的,放在服务器端的D盘 update.xml 1.0 http://mobile.shenhuagroup.com.cn:80/webServer/updateversion 神华移动...
  • 由于本人"手贱"更新的糟糕体验,鉴于对新版本很不爽的情绪,果断卸载,可官网却已没旧版本的下载信息了,这是在贴吧里某大神给的,再此也愿申明,愿未更新的童鞋们要慎重要矜持!当然你要想体验一把也不坏,献给你们...
  • 获取当前手机App版本以及AppStore中的最新版本,判断是否需要更新
  • ios 新版本成功发布,但是却无法在手机更新,是不是提交时步骤有问题,还是其他的原因。
  • SmsManager - Windows Phone手机PC端短信管理工具检查版本更新时将抓取此页面中两个特殊字符串之间的文字内容(共3处),并替换\n为换行,html转义字符为原字符。 wpsmsmanager0-start【1.2】end-wpsmsmanager0 ...
  • Android版本更新

    2014-04-21 15:46:20
    各种平台软件更新做法差不多,大体做法如下: 1.服务器存放一个最新版本的xml文件,或者存在数据库,各种做法都可以。...2.下面是Android手机软件版本更新的教程 2.1项目目录 2.2编写Upd
  • iOS 版本之后,Android 版本也进行了重大更新,增加了Hangout 视频聊天功能;新的 Google+ Android 2.6版本也拥有了与 iOS 版同样炫目的界面。 现在用户可以直接从手机上发起 Hangout 视频群聊,并邀请...
  • 历时3个月开发的大版本更新,刚上线就被吐槽难看,然后要回滚版本,把就代码改吧改吧就发上去了,但是点了更新之后手机居然提示程序未安装,用了几个小时去排查到底哪里出问题了,最后发现是兼容SDK版本出问题了 ...
  • 恩布IM的 ...配合 1.20 恩布IM服务端版本更新 美化登录界面和解决临时讨论组一个操作异常; 性能优化和修正已知BUG; Android 1.4.3.133下载地址: http://download.entboo
  • //获取版本号提示更新 var btn = ["确定升级", "取消"]; //获取app系统更新[是否手动点击获取更新] function appUpdate(ismanual) { console.log('appUpdate'); var banbenid=1; mui.plusReady...
  • Android App版本更新

    2018-11-09 02:23:43
    版本更新需要注意的点 兼容Android7.0 最近我们发现Android7.0的手机更新App的时候会出android.os.FileUriExposedException这个异常,出现这个异常是因为7.0的系统更改了文件系统访问权限。这无疑对我们开发者...
  • 支持checkra1n越狱的所有版本苹果55s66P6S6SP77P88PX等等手机和iPad支持iOS 14 支持MEID 激活锁解信号 支持三网(移动、联通、电信)国行版手机解锁打电话4G等 支持打电话、短信、4G上网、重启、通知、iCloud登录 ...
  • iOS版本更新提示

    2016-05-12 14:51:53
    第一步:获取手机上安装的APP的版本号和AppStore中最新的版本号 第二步:对获取的版本号进行比较 第三步:前往AppStore进行更新下面就是具体的实现代码:需要说明的是 从AppStore中获取版本号是POST请求, 最精准...
  • Android系统中版本更新

    2019-06-29 09:14:51
    一、客户端版本更新: 第一步:TimerUpdate#run() 客户端程序启动后定时(每小时)发送一个请求(设备ID,应用包名,平台【如Android】,多语言,版本号,系统版本号,手机厂商,Android 设备的CPU类型(通常称为”...
  • android版本更新问题

    2013-12-31 13:39:17
    做android开发已经快两年了,经常会到一些论坛... 做版本更新大多数情况会是在一个对话框里,在这里写的就是前些日子做的版本更新。  首先需要判断一下手机的内存卡是否可用: public static boolean isAvailable

空空如也

空空如也

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

手机版本更新