精华内容
下载资源
问答
  • flutter 更新app下载安装

    千次阅读 2019-01-04 13:51:48
    刚开始用的OtaUpdate插件,插件内部使用downloadmanager实现的...二、open_file打开文件自带安装(FlutterDownloader自带打开文件,但不能打开app不知道为啥) 代码: 1、下载监听  FlutterDownloader.registe...
    刚开始用的OtaUpdate插件,插件内部使用downloadmanager实现的国内有很多机型不支持

    思路:不想自己造轮子 使用网上现有插件

    一、使用FlutterDownloader下载

    二、open_file打开文件自带安装(FlutterDownloader自带打开文件,但不能打开app不知道为啥)

    代码:

    1、下载监听 

    FlutterDownloader.registerCallback((id, status, progress) {
          print(
              'Download task ($id) is in status ($status) and process ($progress)');
          if (status == DownloadTaskStatus.complete) {
            OpenFile.open(_localPath);
            FlutterDownloader.open(taskId: id);
          }
        });

    2、下载

    final taskId = await FlutterDownloader.enqueue(
      url: url,
      savedDir: _localPath,
      showNotification:
          true, // show download progress in status bar (for Android)
      openFileFromNotification:
          true, // click on notification to open downloaded file (for Android)
    );
    final tasks = await FlutterDownloader.loadTasks();
    展开全文
  • 最新FlutterAPP内部更新并且安装的功能

    千次阅读 热门讨论 2020-01-04 13:44:43
    前言: 介绍一下APP更新的流程 1 、Android App 升级执行流程 1、获取本地版本号 2、请求服务器获取服务器版本号 ...注意:在 Ios 中没法直接下载安装,如果版本不一致直接跳转到 Ios 应用对应的应用市场就可以了...
    前言:

    介绍一下APP更新的流程
    1 、Android App 升级执行流程
    1、获取本地版本号
    2、请求服务器获取服务器版本号
    3、本地版本和服务器版本不一致提示升级,弹窗提示用户是否更新
    4、用户确定升级,调用文件传输方法下载 apk 文件
    5、监听下载进度
    6、下载完成打开 Apk 进行安装
    注意:在 Ios 中没法直接下载安装,如果版本不一致直接跳转到 Ios 应用对应的应用市场就可以了

    APP内部更新并且安装是许多APP必备的功能,其中网上广为流传的方法是利用以下4个插件来更新并安装APP
    package_info: ^0.4.0+4                       #检测版本号
    path_provider: ^1.1.0                         #文件路径
    open_file: ^2.0.3                             #打开文件
    flutter_downloader: ^1.3.2                    #下载文件
    

    这4个插件是最流行的,但是当我使用的时候,flutter_downloader却出现了下面这个错误

    Unhandled Exception: 'package:flutter_downloader/src/downloader.dart': Failed assertion: line 388 pos 12: 'callbackHandle != null': callback must be a top-level or a static function


    后续追加内容

    关于这个问题我已在彻底解决Flutter_downloader的问题一文中解决了,如果想要继续使用Flutter_downloader的请点击前往


    在这里给大家介绍另外一个下载Apk文件的插件:ota_update
    pub地址:https://pub.dev/packages/ota_update
    gitHub地址:https://github.com/4Q-s-r-o/ota_update

    当然这个插件只是替换flutter_downloader用的,另外三个插件还是需要使用的。

    准备工作:

    1、首先打开你的AndroidManifest.xml,添加下面这些权限代码

    在这里插入图片描述

    <provider
        android:name="sk.fourq.otaupdate.OtaUpdateFileProvider"
        android:authorities="${applicationId}.ota_update_provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths" />
    </provider>
    

    2、创建xml文件夹,并创建filepaths.xml文件

    在这里插入图片描述
    3、将代码复制进去,就可以了

    <paths>
        <external-path
            name="external-path"
            path="."/>
        <external-cache-path
            name="external-cache-path"
            path="."/>
        <external-files-path
            name="external-files-path"
            path="."/>
        <files-path
            name="files_path"
            path="."/>
        <cache-path
            name="cache-path"
            path="."/>
        <root-path
            name="name"
            path="."/>
    </paths>
    
    Flutter代码

    首先:在你需要判断更新的页面中引入你安装的那4个插件

    1
    第一步里面api.getData()是我封装的请求方法,读者在套用代码的时候,可以更换为自己的版本请求接口,

     //获取版本号
      _getPackageInfo() async{
        PackageInfo packageInfo = await PackageInfo.fromPlatform();
        String appName = packageInfo.appName;
        String packageName = packageInfo.packageName;
        String version = packageInfo.version;
        String buildNumber = packageInfo.buildNumber;
        
        api.getData(context, 'update').then((val){
          print('-------------获取版本信息--------------');
          var response = json.decode(val.toString());
          // 如果当前版本比服务器小,返回-1,大返回1,相等返回0
          var isUpdate = version.compareTo(response['version_no']);
    
          setState(() {
            app_url = '$base_url${response['app_path']}';
          });
          // 如果版本低于服务器版本就显示更新提示
          if(isUpdate.toString() == '-1'){
            _showDialog();
          }
        });
        
        print("App名称:${appName}");
    
        print("包名:${packageName}");
    
        print("version:${version}");
        
        print("打包次数:${buildNumber}");
    
      }
    
    弹框在这里我就不占用地方给大家写了,直接就贴出来下载的方法了
    //下载并打开文件
      _downLoad()async {
      	// 获取APP安装路径
         Directory appDocDir = await getApplicationDocumentsDirectory();
         String appDocPath = appDocDir.path;
         
        if (Platform.isIOS){
          String url = 'itms-apps://itunes.apple.com/cn/app/id414478124?mt=8'; //到时候换成自己的应用的地址
          // 通过url_launcher插件来跳转AppStore
          // if (await canLaunch(url)){
          //   await launch(url);
          // }else {
          //   throw 'Could not launch $url';
          // }
        }else if (Platform.isAndroid){
          String url = app_url;
          // String url = "http://www.ionic.wang/jdshop.apk";
          print(url);
          try {
            OtaUpdate().execute(url).listen(
                  (OtaEvent event) {
                print('status:${event.status},value:${event.value}');
                switch(event.status){
                  case OtaStatus.DOWNLOADING: // 下载中
                    setState(() {
                      progress = '下载进度:${event.value}%';
                    });
                    break;
                  case OtaStatus.INSTALLING: //安装中
                      print('-----安装中----');
                      // 打开安装文件
                      //这里的这个Apk文件名可以写,也可以不写
                      //不写的话会出现让你选择用浏览器打开,点击取消就好了,写了后会直接打开当前目录下的Apk文件,名字随便定就可以
                      OpenFile.open("${appDocPath}/new.apk");
                    break;
                  case OtaStatus.PERMISSION_NOT_GRANTED_ERROR: // 权限错误
                    print('更新失败,请稍后再试');
                    
                    break;
                  default: // 其他问题
                    break;
                }
              },
            );
          } catch (e) {
            print('更新失败,请稍后再试');
          }
        }
      }
    

    好了,全部的代码都在这里了,如果有什么问题,请给我留言!

    展开全文
  • App Store上下载安装Xcode

    千次阅读 2015-03-24 10:10:31
    App Store上下载安装Xcode

    App Store上下载和安装Xcode

    Xcode的下载和安装

    要编写一个Sprite Kit程序,需要使用到Xcode开发工具。本节将主要讲解此工具的两种下载和安装方式:一种是在App Store上进行下载和安装;另一种是在其他的网站中进行下载,然后手动进行安装本文选自iOS游戏框架Sprite Kit基础教程swift版。

    1.3.1  App Store上下载和安装Xcode

    App Store中提供了很多的软件,而Xcode也在其中。以下就是在App Store中下载和安装Xcode的具体步骤本文选自iOS游戏框架Sprite Kit基础教程swift版:

    (1)在Dock中找到App Store,如图1.15所示。


    图1.15  操作步骤1

    (2)单击App Store图标,打开App Store,如图1.16所示。


    图1.16  操作步骤2

    (3)在搜索栏中输入要搜索的内容,即Xcode,按下回车,进行搜索,如图1.17所示。


    图1.17  操作步骤3

    (4)单击Xcode右下方的“免费”按钮,此时“免费”按钮变为了“安装APP”按钮,如图1.18所示。


    图1.18  操作步骤4

    (5)单击“安装APP”按钮,弹出“登录App Store来下载”对话框,如图1.19所示。


    图1.19  操作步骤5

    (6)输入Apple ID以及密码后,单击“登录”按钮。此时“安装APP”按钮变为了“安装”按钮,如图1.20所示。并且Xcode会在Launchpad中进行下载和安装,如图1.21所示。


    图1.20  操作步骤6


    图1.21  操作步骤7

    (7)一般在Launchpad中下载的软件,都可以在应用程序中找到。选择“前往|应用程序”打开应用程序,如图1.22所示。


    图1.22  操作步骤8

    (8)双击Xcode,弹出Xcode and iOS SDK License Agreement对话框,如图1.23所示。

    (9)单击Agree按钮,弹出“"Xcode"想要进行更改。键入您的密码以允许执行此操作”,如图1.24所示。


    图1.23  操作步骤9                               图1.24  操作步骤10

    (10)输入密码,单击“好”按钮,进行组件的安装。组件安装完成后,就会弹出Welcome to Xcode对话框。此时Xcode就被启动了,如图所1.25示本文选自iOS游戏框架Sprite Kit基础教程swift版。


    图1.25  启动Xcode

    展开全文
  • App下载、静默安装并自启动

    千次阅读 2018-03-31 16:01:58
    前不久遇到一个需求,说是要实现app的静默安装并且安装完了之后要能够自启动。我上网查了很多资料,方法基本都差不多,但是基本上每种方法我都试过了,能够实现静默安装,但是自启动的时候就遇到了问题。很多类似的...
    前不久遇到一个需求,说是要实现app的静默安装并且安装完了之后要能够自启动。我上网查了很多资料,方法基本都差不多,但是基本上每种方法我都试过了,能够实现静默安装,但是自启动的时候就遇到了问题。很多类似的博客下面几乎都有人提问说为啥不能够自启动。我当时在操作的时候也发现自启动失败,后来我反复推敲尝试实现了这个功能,大多数博客介绍的方法是没有问题的,问题在于博主没有把过程讲述得很清楚,从而给读者造成了误解,特此发文一篇希望帮助广大受阻的读者。
    
    静默更新这个需求是有一定的前提的,一般这类的需求只会出现在一些厂商定制的pad或特定设备上面,系统要给足了root权限,手机上有一类做法可以在不需要root权限的前提下实现更新,但模式算不得静默更新,当然这不是我们今天要讨论的问题,我也就不在这里多说了。
    

    一、安装包下载

    安装包下载相关的文章数不胜收,主要是代码涉及静默安装,我这里就把我的代码拿出来做个参考吧。
    
    public class DownLoadUtils {
    
        public static void download(final String apkUrl) {
            Thread thread;
            thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    downloadFile(apkUrl);
                }
            });
            thread.start();
        }
    
        //下载apk
        public static File downloadFile(String apkUrl) {
            final String fileName = "update.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(apkUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                InputStream is = conn.getInputStream();
                FileOutputStream fos = new FileOutputStream(file);
                byte[] buf = new byte[1024];
                conn.connect();
                double count = 0;
                if (conn.getResponseCode() >= 400) {
                    //连接超时
                } else {
                    while (count <= 100) {
                        Log.e("install", "download" + count + "");
                        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();
                InstallApkUtils.excuteSuCMD(InstallApkUtils.sdPath);//执行静默安装
            } catch (Exception e) {
                e.printStackTrace();
            }
            return file;
        }
    }

    上面的代码中,当安装包下载完成之后,开始执行静默安装方法。

    二、静默安装

    强调一点,文章中提到的静默安装是在系统开发了root权限的前提之下,如果没有获取root权限,还是采用系统的安装流程吧!
    
    public class InstallApkUtils {
        public static Context mContext = null;
        public static String sdPath = "/sdcard/update/update.apk";//下载sd路径
    
        //判断是否update目录下有文件
        public static boolean isHasFile() {
            try {
                File f = new File(sdPath);
                if (!f.exists()) {
                    return false;
                }
            } catch (Exception e) {
                return false;
            }
            return true;
        }
    
    
        public static void excuteSuCMD(String currenttempfilepath) {
            if (isHasFile()) {
                Process process = null;
                OutputStream out = null;
                InputStream in = null;
                try {
                    //请求root
                    process = Runtime.getRuntime().exec("su");
                    out = process.getOutputStream();
                    //调用安装
                    out.write(("pm install -r " + currenttempfilepath + "\n").getBytes());
                    in = process.getInputStream();
                    int len = 0;
                    byte[] bs = new byte[256];
                    while (-1 != (len = in.read(bs))) {
                        String state = new String(bs, 0, len);
                        if (state.equals("success\n")) {
                            //安装成功后的操作
                            //静态注册自启动广播
                            Intent intent = new Intent();
                            //与清单文件的receiver的anction对应
                            intent.setAction("android.intent.action.PACKAGE_REPLACED");
                            //发送广播
                            mContext.sendBroadcast(intent);
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (out != null) {
                            out.flush();
                            out.close();
                        }
                        if (in != null) {
                            in.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            } else {
                Log.e("install", "apk is not exist");
            }
        }
    }
    安装完成之后我们会发送一条广播
    
    //静态注册自启动广播
     Intent intent = new Intent();
     //与清单文件的receiver的anction对应
     intent.setAction("android.intent.action.PACKAGE_REPLACED");
     //发送广播
     mContext.sendBroadcast(intent);

    三、注册并接收广播

    上面的安装中提到了安装结束会发送一个广播,这条广播的作用就是如果发生了安装包的替换就重新启动应用。
    

    注意:很多人说安装完成之后,应用并没有自己启动,问题在于更新后的安装包没有注册并接收上一个版本发出的广播,下面所提到的源代码一定要在新安装的apk包中实现。

    public class UpdateReceiver extends BroadcastReceiver {
    
        public static final String UPDATE_ACTION = "android.intent.action.PACKAGE_REPLACED";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(UPDATE_ACTION)) {
                Intent intent2 = new Intent(context, TestActivity.class);
                intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent2);
            }
            //接收安装广播
            if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
                String packageName = intent.getDataString();
    //            System.out.println("安装了:" + packageName + "包名的程序");
    
            }
            //接收卸载广播
            if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
                String packageName = intent.getDataString();
    //            Log.e("install","卸载了:" + packageName + "包名的程序");
            }
        }
    }
    然后在AndroidManifest.xml文件中注册UpdateReceiver,当然你也可以选择在源代码中动态注册。
    
    <!--静默更新、自启动-->
    <receiver android:name=".utils.UpdateReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         <intent-filter>
             <action android:name="android.intent.action.PACKAGE_REPLACED" />
             <action android:name="android.intent.action.PACKAGE_ADDED" />
             <action android:name="android.intent.action.PACKAGE_REMOVED" />
             <data android:scheme="package" />
          </intent-filter>
     </receiver>
      当然需要用到的权限不要忘了声明
    
    <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
      <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
      <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
      <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
      <uses-permission android:name="android.permission.RESTART_PACKAGES" />
      <uses-permission
            android:name="android.permission.INSTALL_PACKAGES"
            tools:ignore="ProtectedPermissions" />

    四、总结

    整个过程大概流程如下:

    1. 下载apk到指定的文件夹下(声明相关的权限);
    2. 注册广播,用来监听app的变动情况实现app的自启动,广播的注册和接收处理在所有的app版本里都要存在;
    3. 获取root权限,从文件夹获取安装包,执行安装程序;
    4. 安装完成之后,发送广播重新启动app。

    我当时在实现的过程中,发现app没有重新启动,但是退出app再重新进入已经是更新过的版本,后来我反复阅读别人的文章,发现是我自己没有理解透彻整个实现的过程,我放在服务器上的安装包没有实现广播的接收流程,所以导致了app没有重新启动,后来重新上传了安装包测试通过。

    展开全文
  • BB AppWorld安装文件

    2011-09-15 18:01:33
    AppWorld安装文件。 App world 是黑莓公司出的一款类似于 app store 的一款软件.实现blackberry应用程序的集中下载.和主题分类下载. 并且在近日appworld 可以在国内使用啦.
  • ros-app下载以及使用注意事项 声明:这里的资源分享仅供学习使用,如有侵犯原创利益,望谅解。 使用ros的手机app连接机器人ros_master进行对机器人控制,摄像头视频显示,地图显示,设定初始点和导航目标点等功能,...
  •  之前boss提出一个需求,运行在广告机上的app,需要完成自动升级的功能,广告机是非触摸屏的,不能通过手动点击,所以app必须做到自动下载,自动安装升级,并且安装完成后,app还要继续运行,最好不借助其它app来...
  • App启动检查更新下载安装apk

    千次阅读 2018-06-21 16:03:15
    现在很多的App中都会有一个检查版本的功能。...(1)如果服务器所返回的版本号大于当前App版本号那么此时手机所安装App不是最新版。可以提示用户升级。(2)如果不大于当前版本号,可以提示用户为最新版本:...
  • app下载需要申请sd卡的读写权限,所以在android6.0之后需要动态申请 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //...
  • iOS中 CocoaPods Mac App安装和使用 韩俊强的博客 iOS开发者交流QQ群: 446310206
  • iOS:苹果企业证书通过网页分发安装app  苹果的企业级证书发布的应用,是不用设备授权即可直接安装并且不限设备上限。为了方便分发,苹果有协议实现通过网页链接直接下载安装企业级的应用。  基本的原理...
  • adb下载安装及使用

    万次阅读 多人点赞 2019-05-23 12:00:15
    adb下载安装: 一共有两种方法: 首先第一种就是最简单的方法,只下载adb压缩包去解压即可:链接:https://pan.baidu.com/s/1SKu24yyShwg16lyIupO5VA 提取码:ih0i (备注:如果下载放入到D盘去解压,打开dos窗口...
  • whatsapp最新安卓及PC电脑端下载安装

    千次阅读 2020-07-15 09:16:49
    WhatsApp安卓版本更新非常频繁,收藏此网页方便下次快速下载更新版本。安卓版每周定期更新。 安卓手机版:2.20.195.13 网盘下载地址: https://590m.com/file/3938181-453228886 进入网盘使用普通下载即可,无需安装...
  • App静默安装(升级)和卸载

    千次阅读 2019-12-08 21:05:22
    调用系统API,通过Intent启动com.android.packageinstaller(PackageInstaller.apk)系统app进行安装或升级;需要用户同意,并且有前台界面; 查看PackageInstaller在系统的存放位置:adb shell pm list packages -f ...
  • 怎样实现App安装来源追踪

    千次阅读 2018-12-25 17:21:37
    众所周知,国内的应用商店存在一定的限制,开发者很难有效监测到App安装来源的精准数据。但在实际推广中,广告效果、用户行为、付费统计、邀请关系等不同渠道的指标却是衡量渠道价值的关键,对App的运营推广和营销...
  • 下载第三方app + 导入第三方beat saber歌曲 这篇文章有几个步骤:下载安装sidequest,打开开发者模式,用sidequest下载安装自定义歌曲,导入自己的自定义歌曲 教程部分来源:...
  • 一、需求分析 1、实现app之间的通信有多种方式 单从前端角度来看,需要... URL Scheme就是一个可以让app相互之间可以跳转的对外接口,为方便app之间互相调用而设计的。通过给APP定义一个唯一的URL路径来从外部快...
  • 判断是否安装第三方软件,并且打开跳转到AppStore下载地址 第一步 添加scheme 在info配置处,URL type添加需要打开第三方软件的标示 或者直接在info下添加 key LSApplicationQueriesSchemes 第二步 以...
  • 数据显示,app store在2008年7月上线之初,app数量只有500多个,同年10月谷歌上线android market(现为google play)仅有40多个;截至2015年1月,前者的app数量达到121万,后者则已突破143万。你一定很吃惊这个数字...
  • App首次安装 - 授权网络访问的坑

    万次阅读 2018-02-11 18:08:23
    App首次安装 - 授权网络访问的坑 参考链接:iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据” 1.这个弹框到底是个啥? 2.怎么能够触发 1.首先,你得有一台国行版本的iPhone...
  • Android APP自动升级安装失败

    千次阅读 2018-09-24 17:32:45
    ##Android APP自动升级安装失败 ###概述 自动升级在APP中是一个非常常见的功能,当你的应用有更新时,可以提醒用户升级甚至在必要时可强制用户升级。但随着系统版本的更新,安装apk的权限也在收紧,导致一些APP在高...
  • 前言: 非越狱设备,在你的应用里无法知道系统安装了什么别的应用。  ...如果想要准确的通过程序控制和...一、如何判断是否安装App 用 UIApplication 的 canOpenUrl 方法,当然前提是要检测的应用程序注册
  • 本人第一次写博客,菜鸟一只,也不大会用语言表述,写博客只是单纯记录下自己遇到的问题,并且记录下来以便日后使用的时候可以有个思路。如果能够帮助到别人就更好了。 现在公司的项目需要用vue做一个安卓app,需要...
  • 前言: 非越狱设备,在你的应用里无法知道系统安装了什么别的应用。  ...如果想要准确的通过程序控制和...一、如何判断是否安装App 用 UIApplication 的 canOpenUrl 方法,当然前提是要检测的应用程序注册
  •  需求:app分享出去的链接(只有报名和投票,在详情页里面点击报名或者投票才唤起app),如果本地安装了这个应用则可以直接唤醒app并在app内部打开这个链接的详情页面,如果本地没有安装这个app,则跳转到下载页面...
  • 强制升级: 1.新建服务 package ... import android.app.DownloadManager; import android.app.Service; import android.content.BroadcastReceiver; import android.content.ContentResolver
  • H5判断是否安装app和唤起APP

    万次阅读 2017-03-03 10:14:07
    html里是无法检测的,只能通过js调用android的方法,获取到app安装信息后,再调用js,传值到html里获得。$(function(){ $(".a").click(function(){ var the_href=http://segmentfault.com/a/$(".a").attr("href...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 132,610
精华内容 53,044
关键字:

下载app并且安装