Andro sudio 如何让app自动更新?

三色 2017-06-17 02:01:45
我写了一个app,希望可以自动更新,接触安卓开发才1个星期,所以是小白中的小白。
按照我的宏观理解,
1,应该有个远程服务器端,用放新版本的app,同时存有app的版本号
2,app在安卓上运行时,首先判断自己的版本号,然后请求服务端的版本号,两者不一致时提示更新,
如果用户选择了更新,那么从服务端请求下载新的app,下载完毕后自动安装

我觉得流程应该是这样的,但是因为才接触安卓开发1周,许多基本的内容都完全不知道
如,昨天增加手指滑动事件的捕捉,非常简单的功能,结果弄了2个小时才搞定。

我想知道如何实现,
1,服务器空间是不是网上那可以免费申请?
2,自动更新的最简单demo有没有?

考虑到我是小白,希望过来人提供最基础最简单的实现方法
我才刚刚了解了layout和actitity的概念。。。
...全文
387 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
三色 2017-06-23
  • 打赏
  • 举报
回复
引用 14 楼 wang_qian_kun 的回复:
话不多说直接上代码了,可能有点乱请自行整理吧
protected File downLoadFile(String httpUrl) {
                // TODO Auto-generated method stub
                final String fileName = "updata.apk";
                File tmpFile = new File("/sdcard/update");
                if (!tmpFile.exists()) {
                        tmpFile.mkdir();
                }
                final File file = new File("/sdcard/update/" + fileName);

                try {
                        URL url = new URL(httpUrl);
                        try {
                                HttpURLConnection conn = (HttpURLConnection) url
                                                .openConnection();
                                InputStream is = conn.getInputStream();
                                FileOutputStream fos = new FileOutputStream(file);
                                byte[] buf = new byte[256];
                                conn.connect();
                                double count = 0;
                                if (conn.getResponseCode() >= 400) {
                                        Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)
                                                        .show();
                                } else {
                                        while (count <= 100) {
                                                if (is != null) {
                                                        int numRead = is.read(buf);
                                                        if (numRead <= 0) {
                                                                break;
                                                        } else {
                                                                fos.write(buf, 0, numRead);
                                                        }

                                                } else {
                                                        break;
                                                }

                                        }
                                }

                                conn.disconnect();
                                fos.close();
                                is.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block

                                e.printStackTrace();
                        }
                } catch (MalformedURLException e) {
                        // TODO Auto-generated catch block

                        e.printStackTrace();
                }

                return file;
        }
//打开APK程序代码

private void openFile(File file) {
                // TODO Auto-generated method stub
                Log.e("OpenFile", file.getName());
                Intent intent = new Intent();
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.setAction(android.content.Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.fromFile(file),
                                "application/vnd.android.package-archive");
                startActivity(intent);
        }
//安装部分
String str = "/CanavaCancel.apk"; 
String fileName = Environment.getExternalStorageDirectory() + str; 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); 
startActivity(intent);
感谢,这几天比较忙,没顾得上这事。 我也网上找了很多代码,跟您这大同小异,已经显示了自动更新。 还有几个疑问: 1,我下载并更新了安装后,没有"完成","打开"的选项。 我看您多了intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);这一句, 是否这句就是有这个功能?我现在手头无法测试编译,只有晚上有时间 2,你的打开APK程序代码, 和 安装部分,不是一回事吗? 我也是这样写的,能运行APK进行安装,但有个问题,在android7.0以上系统报错, 我网上查了,貌似又是安全问题,不过提供了解决方法:通过file provider,虽然复杂了很多,好歹也搞定了, 但是,在7.0系统中,能运行apk安装,但是提示the packgage conflicts with existed package same name... 大概是因为已经安装了相同名字的apk,无法覆盖安装,但自动更新不都是要覆盖安装的吗? 我在6.0系统下就没有问题。 对了,6.0是我的实体手机(三星Note5),而7.0是android studio 的模拟器 盼回
三色 2017-06-23
  • 打赏
  • 举报
回复
自己解决了。 谢谢各位。
三色 2017-06-23
  • 打赏
  • 举报
回复
快40的老人了,也就有兴趣玩玩而已。
程序这东西都差不多,无论什么语言,语法都类似,操作也就那些,就是新的ide环境和套路不熟悉,没人教一下自己网上找资料费事些
huohao-nicole 2017-06-23
  • 打赏
  • 举报
回复
你可以,才接触安卓一周就研究这么深奥的问题,未来不可限量啊
  • 打赏
  • 举报
回复
话不多说直接上代码了,可能有点乱请自行整理吧
protected File downLoadFile(String httpUrl) {
                // TODO Auto-generated method stub
                final String fileName = "updata.apk";
                File tmpFile = new File("/sdcard/update");
                if (!tmpFile.exists()) {
                        tmpFile.mkdir();
                }
                final File file = new File("/sdcard/update/" + fileName);

                try {
                        URL url = new URL(httpUrl);
                        try {
                                HttpURLConnection conn = (HttpURLConnection) url
                                                .openConnection();
                                InputStream is = conn.getInputStream();
                                FileOutputStream fos = new FileOutputStream(file);
                                byte[] buf = new byte[256];
                                conn.connect();
                                double count = 0;
                                if (conn.getResponseCode() >= 400) {
                                        Toast.makeText(Main.this, "连接超时", Toast.LENGTH_SHORT)
                                                        .show();
                                } else {
                                        while (count <= 100) {
                                                if (is != null) {
                                                        int numRead = is.read(buf);
                                                        if (numRead <= 0) {
                                                                break;
                                                        } else {
                                                                fos.write(buf, 0, numRead);
                                                        }

                                                } else {
                                                        break;
                                                }

                                        }
                                }

                                conn.disconnect();
                                fos.close();
                                is.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block

                                e.printStackTrace();
                        }
                } catch (MalformedURLException e) {
                        // TODO Auto-generated catch block

                        e.printStackTrace();
                }

                return file;
        }
//打开APK程序代码

private void openFile(File file) {
                // TODO Auto-generated method stub
                Log.e("OpenFile", file.getName());
                Intent intent = new Intent();
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.setAction(android.content.Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.fromFile(file),
                                "application/vnd.android.package-archive");
                startActivity(intent);
        }
//安装部分
String str = "/CanavaCancel.apk"; 
String fileName = Environment.getExternalStorageDirectory() + str; 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); 
startActivity(intent);
三色 2017-06-17
  • 打赏
  • 举报
回复
我等等更多的建议
santan 2017-06-17
  • 打赏
  • 举报
回复
去腾讯云注册一个帐号,现在应该有免费几个月的主机
  • 打赏
  • 举报
回复
最后bb一下,建议楼主先别结贴,工作日论坛才会比较活跃,楼主可以等一波
三色 2017-06-17
  • 打赏
  • 举报
回复
谢谢,我试一下
  • 打赏
  • 举报
回复
发布可以发布在各个平台上,只是要注册一下你的信息而已。如:华为商城,小米商城,应用宝等。需要先申请一个开发者账号。 http://jingyan.baidu.com/article/4dc408489c11b0c8d946f182.html 版本更新这一块没办法提供建议
三色 2017-06-17
  • 打赏
  • 举报
回复
我是小白中的小白,我再慢慢研究一下
  • 打赏
  • 举报
回复
引用 5 楼 ThreeColor 的回复:
还有,完整的app已经开发完了,虽然只1周:) 我在学习韩国语,老师提供的内容,我整理后编入app,方便学习,同时还提供模拟测试等功能, 现在已经在老师和同学间使用,极大的提高了学习效率。 随着学习的深入,我会把新的内容加入app,经常需要更新,如果没有自动云端更新就非常麻烦。 后续计划把很多内容以数据库方式存在云端,那么app也不需要频繁更新。 app也植入了支付宝打赏功能,开发完才几天,已经受到100多打赏款了:)纯属娱乐
QAQ感觉在大大面前班门弄斧了,目前我在独立开发,独自在踩各种坑,可怕
  • 打赏
  • 举报
回复
引用 4 楼 ThreeColor 的回复:
谢谢,虽然我 对android编程不熟悉,但是我有20年编程经验,开发过大量程序(都是windows的桌面应用)。 所以开发思路什么的对我问题大。 我想了解, 1,是不是得在某个提供云服务的地方,去申请一个空间?用于存放新版app - 理论上应该需要 - 哪个能免费提供,并且比较稳定好用的 2,连接云端的一些操作demo - 获取云端版本号 - 下载云端新版本app 3,自动安装 - 新app如何存储到本地sd卡上,有没有什么特别的 - 如何自动安装 以上对android开发者来说都是最最基本的,如果是windows程序对我而言分分钟的事。 但是android不熟,希望简单的代码或demo共享一下
答: 关于发布 一般而言我们的app在完成之后会发布在一些app商城上或者自己的官网上。在app商城上会有一系列的要求,按着操作做就可以了。如果是自己官网的话没弄过没办法详答。 关于更新 而andoridapp是可以设置版本的(这里涉及到一个叫做版本迭代的知识点,掌握不深不多言)当你有新的版本上传的时候,就可以自动检测并更新。 关于安装,当下我们在用android studio 开发的时候,完成开发后会有生成apk包(安装包)的一个操作,具体你的可以去看网上的一系列教程,讲的都会比我清晰很多。
三色 2017-06-17
  • 打赏
  • 举报
回复
引用 3 楼 EX_Cj 的回复:
[quote=引用 2 楼 ThreeColor 的回复:] [quote=引用 1 楼 EX_Cj 的回复:] 根据我浅薄的理解,android当下权限被限制了这么多的情况下你还想自动更新?兄弟这种扫操作怕是没有了,基本上现在更新都要获得用户许可?都是检测到新版本,弹出窗口,然后用户确定,这样才能更新啊
不自动也没关系啊,更新权限就是交给用户的。 程序启动时检测是否有新版本,有的话弹出提示,让用户选择是否更新[/quote] 刚刚才看到你了解到了activity和layout的程度,那我这里直接先和你讲思路,多的东西你在学习中自己体会理解吧。 一般在编程中在打开程序的时候我们会设置先运行一行判断代码, 这种验证代码有: 判断是否第一次启动app是的话弹出导航栏, 判断app是否有新版本,有的话提出弹窗, 判断app是否联网等...... 你在学习的时候可以先不管这个,等你着手开发完整的应用的时候就会接触到了。 [/quote] 还有,完整的app已经开发完了,虽然只1周:) 我在学习韩国语,老师提供的内容,我整理后编入app,方便学习,同时还提供模拟测试等功能, 现在已经在老师和同学间使用,极大的提高了学习效率。 随着学习的深入,我会把新的内容加入app,经常需要更新,如果没有自动云端更新就非常麻烦。 后续计划把很多内容以数据库方式存在云端,那么app也不需要频繁更新。 app也植入了支付宝打赏功能,开发完才几天,已经受到100多打赏款了:)纯属娱乐
三色 2017-06-17
  • 打赏
  • 举报
回复
谢谢,虽然我 对android编程不熟悉,但是我有20年编程经验,开发过大量程序(都是windows的桌面应用)。 所以开发思路什么的对我问题大。 我想了解, 1,是不是得在某个提供云服务的地方,去申请一个空间?用于存放新版app - 理论上应该需要 - 哪个能免费提供,并且比较稳定好用的 2,连接云端的一些操作demo - 获取云端版本号 - 下载云端新版本app 3,自动安装 - 新app如何存储到本地sd卡上,有没有什么特别的 - 如何自动安装 以上对android开发者来说都是最最基本的,如果是windows程序对我而言分分钟的事。 但是android不熟,希望简单的代码或demo共享一下
  • 打赏
  • 举报
回复
引用 2 楼 ThreeColor 的回复:
[quote=引用 1 楼 EX_Cj 的回复:] 根据我浅薄的理解,android当下权限被限制了这么多的情况下你还想自动更新?兄弟这种扫操作怕是没有了,基本上现在更新都要获得用户许可?都是检测到新版本,弹出窗口,然后用户确定,这样才能更新啊
不自动也没关系啊,更新权限就是交给用户的。 程序启动时检测是否有新版本,有的话弹出提示,让用户选择是否更新[/quote] 刚刚才看到你了解到了activity和layout的程度,那我这里直接先和你讲思路,多的东西你在学习中自己体会理解吧。 一般在编程中在打开程序的时候我们会设置先运行一行判断代码, 这种验证代码有: 判断是否第一次启动app是的话弹出导航栏, 判断app是否有新版本,有的话提出弹窗, 判断app是否联网等...... 你在学习的时候可以先不管这个,等你着手开发完整的应用的时候就会接触到了。
三色 2017-06-17
  • 打赏
  • 举报
回复
引用 1 楼 EX_Cj 的回复:
根据我浅薄的理解,android当下权限被限制了这么多的情况下你还想自动更新?兄弟这种扫操作怕是没有了,基本上现在更新都要获得用户许可?都是检测到新版本,弹出窗口,然后用户确定,这样才能更新啊
不自动也没关系啊,更新权限就是交给用户的。 程序启动时检测是否有新版本,有的话弹出提示,让用户选择是否更新
  • 打赏
  • 举报
回复
根据我浅薄的理解,android当下权限被限制了这么多的情况下你还想自动更新?兄弟这种扫操作怕是没有了,基本上现在更新都要获得用户许可?都是检测到新版本,弹出窗口,然后用户确定,这样才能更新啊

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧