精华内容
下载资源
问答
  • 下载app 安装
    千次阅读
    2018-02-24 17:50:42

    1  下载功能

    //下载apk
        private void downloadApk(String apkUrl) throws PackageManager.NameNotFoundException {
    
            Uri uri = Uri.parse(apkUrl);
            DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            DownloadManager.Request request = new DownloadManager.Request(uri);
            // 设置允许使用的网络类型,这里是移动网络和wifi都可以
            request.setAllowedNetworkTypes(request.NETWORK_MOBILE | request.NETWORK_WIFI);
            //设置是否允许漫游
            request.setAllowedOverRoaming(true);
            //设置文件类型
            MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
            String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(apkUrl));
            request.setMimeType(mimeString);
            //在通知栏中显示
            request.setNotificationVisibility(request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setTitle("download...");
            request.setVisibleInDownloadsUi(true);
            //sdcard目录下的download文件夹
            request.setDestinationInExternalPublicDir("/download", "SanjuScanApp_Android.apk");
            // 将下载请求放入队列
            downloadManager.enqueue(request);
        }


    2  设置接收广播

    public class InstallReceiver extends BroadcastReceiver {
    
        // 安装下载接收器
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
                installApk(context);
            }
        }
    
        // 安装Apk
        private void installApk(Context context) {
    
            try {
                Intent i = new Intent(Intent.ACTION_VIEW);
                String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/download/SanjuScanApp_Android.apk";
                i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }

    3  注册广播(AndroidManifest.xml的receiver节点)

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.tyler.myapplication">
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
        <application>
            <activity
                android:name=".LoginActivity"
            </activity>
            
            <receiver
                android:name="com.example.tyler.HelperTool.InstallReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
                </intent-filter>
            </receiver>
        </application>





    更多相关内容
  • 业务逻辑:在工作种遇到...所以,就要 检测有没安装,没有安装下载安装。 1,检测 APP 是否安装。 /** * 检测 APP是否已安装。 * * @param context 当前上下文 * @param packageName 包名 * @return ...

    业务逻辑:在工作种遇到这种需求,就是打开第三APP。
    但是这个时候要确保这个APP有没有在本地TV上。所以,就要 检测有没安装,没有安装就下载安装。
    1,检测 APP 是否安装。


      /**
         * 检测 APP是否已安装。
         *
         * @param context 当前上下文
         * @param packageName 包名
         * @return
         */
    public static boolean isAvilible(Context context, String packageName) {
            final PackageManager packageManager = context.getPackageManager();
            List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
            List<String> packageNames = new ArrayList<String>();
    
            if (packageInfos != null) {
                for (int i = 0; i < packageInfos.size(); i++) {
                    String packName = packageInfos.get(i).packageName;
                    packageNames.add(packName);
                }
            }
            // 判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
            return packageNames.contains(packageName);
        }
    

    2,

                    if (true != isInstallAPP) {//没有就下载
                                            downLoadApp(‘你的下载路径’, ‘APP的名字’ + ".apk");
                                        } else {
                                            //有的话就直接打开
                                            PackageManager packageManager = getPackageManager();
                                            Intent intent = packageManager.getLaunchIntentForPackage(games.get(position).getPackageName());  //com.xx.xx是我们获取到的包名
                                            startActivity(intent);
                                        }

    3,下载的代码。这里用的是OKGO框架。

    /**
         * APP下载
         *
         * @param url 下载路径
         * @param fileName APP名字
         */
        public void downLoadApp(String url, final String fileName) {
            OkGo.<File>get(url)
                    .tag(this)
                    .execute(new FileCallback(fileName) {
                        @Override
                        public void onStart(Request<File, ? extends Request> request) {
                            super.onStart(request);
                            Log.e("downloadProgress: ", "NONE" + Progress.NONE);
                            showDialog();
                        }
    
                        @Override
                        public void onSuccess(Response<File> response) {//sdcard/download/ 默认下载路径
                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            intent.setDataAndType(
                                    Uri.fromFile(new File("/mnt/sdcard/Download/" + fileName)),
                                    "application/vnd.android.package-archive");
                            Log.e("包路径---", "/mnt/sdcard/Download/" + fileName);
                            hud.dismiss();
                            startActivity(intent);//下载完后 启动应用。
                        }
    
                        @Override
                        public void downloadProgress(Progress progress) {
                            super.downloadProgress(progress);
    //                            dialog.setPRo((int) progress.fraction);
    
                        }
    
                        @Override
                        public void onFinish() {
                            super.onFinish();
    
                        }
                    });
        }

    记个笔记,防止忘记。

    展开全文
  • android App下载安装

    千次阅读 2022-06-22 14:59:46
    androidAPP更新与下载以及安装核心代码,附有DEMO

    很多时候都需要升级app,就会在有下载app与安装app,本文就分为两块下载与安装,在文章底部附上DEMO

    一、下载,此处下载使用的是OKHttp下载

     public static final String URLStr = "https://cdn.weizhiyou.top/down/wzy.apk";//apk地址
    //    private ProgressBar progressBar;
    
        public void downloadApk() {
            DownloadUtil.get().download(URLStr, "download", new DownloadUtil.OnDownloadListener() {
                @Override
                public void onDownloadSuccess(final File file) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            progressBar.setVisibility(View.GONE);
                            Toast.makeText(HomeActivity.this, "下载完成", Toast.LENGTH_SHORT).show();
                            Log.e("LZ---apkpath",file.getAbsolutePath());//文件存储的路径
                            installAPK(HomeActivity.this, file);
                        }
                    });
    
                }
    
                @Override
                public void onDownloading(final int progress) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            progressBar.setVisibility(View.VISIBLE);
                            progressBar.setProgress(progress);下载进度条
                        }
                    });
    
                }
    
                @Override
                public void onDownloadFailed() {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(HomeActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
                        }
                    });
    
                }
            });
        }

    二、下载完成后进入安装部分

    
        /**
         * 安装APK内容
         */
        public void installAPK(Context mContext, File apkName) {
            try {
                if (!apkName.exists()) {
                    return;
                }
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//安装完成后打开新版本
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 给目标应用一个临时授权
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//判断版本大于等于7.0
                    //如果SDK版本>=24,即:Build.VERSION.SDK_INT >= 24,使用FileProvider兼容安装apk
                    String packageName = mContext.getApplicationContext().getPackageName();
                    String authority = new StringBuilder(packageName).append(".provider").toString();
                    Uri apkUri = FileProvider.getUriForFile(mContext, authority, apkName);
                    intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
                } else {
                    intent.setDataAndType(Uri.fromFile(apkName), "application/vnd.android.package-archive");
                }
                mContext.startActivity(intent);
                android.os.Process.killProcess(android.os.Process.myPid());//安装完之后会提示”完成” “打开”。
    
            } catch (Exception e) {
            }
        }

    三,下载的封装类DownloadUtil

    package com.lxb.demo0325;
    
    import android.os.Environment;
    import android.util.Log;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    
    public class DownloadUtil {
        private static DownloadUtil downloadUtil;
        private final OkHttpClient okHttpClient;
    
        public static DownloadUtil get() {
            if (downloadUtil == null) {
                downloadUtil = new DownloadUtil();
            }
            return downloadUtil;
        }
    
        private DownloadUtil() {
            okHttpClient = new OkHttpClient();
        }
    
        /**
         * @param url 下载连接
         * @param saveDir 储存下载文件的SDCard目录
         * @param listener 下载监听
         */
        public void download(final String url, final String saveDir, final OnDownloadListener listener) {
            Request request = new Request.Builder().url(url).build();
            okHttpClient.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    // 下载失败
                    listener.onDownloadFailed();
                }
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    InputStream is = null;
                    byte[] buf = new byte[2048];
                    int len = 0;
                    FileOutputStream fos = null;
                    // 储存下载文件的目录
                    String savePath = isExistDir(saveDir);
                    try {
                        is = response.body().byteStream();
                        long total = response.body().contentLength();
                        File file = new File(savePath, getNameFromUrl(url));
                        fos = new FileOutputStream(file);
                        long sum = 0;
                        while ((len = is.read(buf)) != -1) {
                            fos.write(buf, 0, len);
                            sum += len;
                            int progress = (int) (sum * 1.0f / total * 100);
                            // 下载中
                            listener.onDownloading(progress);
                        }
                        fos.flush();
                        // 下载完成
                        listener.onDownloadSuccess(file);
                    } catch (Exception e) {
                        listener.onDownloadFailed();
                    } finally {
                        try {
                            if (is != null)
                                is.close();
                        } catch (IOException e) {
                        }
                        try {
                            if (fos != null)
                                fos.close();
                        } catch (IOException e) {
                        }
                    }
                }
            });
        }
    
        /**
         * @param saveDir
         * @return
         * @throws IOException
         * 判断下载目录是否存在
         */
        private String isExistDir(String saveDir) throws IOException {
            // 下载位置
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    
                File downloadFile = new File(Environment.getExternalStorageDirectory(), saveDir);
                if (!downloadFile.mkdirs()) {
                    downloadFile.createNewFile();
                }
                String savePath = downloadFile.getAbsolutePath();
                Log.e("savePath",savePath);
                return savePath;
            }
            return null;
        }
    
        /**
         * @param url
         * @return
         * 从下载连接中解析出文件名
         */
        private String getNameFromUrl(String url) {
            return url.substring(url.lastIndexOf("/") + 1);
        }
    
        public interface OnDownloadListener {
            /**
             * 下载成功
             */
            void onDownloadSuccess(File str);
    
            /**
             * @param progress
             * 下载进度
             */
            void onDownloading(int progress);
    
            /**
             * 下载失败
             */
            void onDownloadFailed();
        }
    
    }
    

    核心代码已列出,需要看效果可以下载demo

    下载链接地址需该自己文件地址

    demo下载icon-default.png?t=M5H6https://download.csdn.net/download/generallizhong/85735429?spm=1001.2014.3001.5501                                                                                             -END

    展开全文
  • 二维码深入人心,很多App都在官网挂出了可以扫描下载apk的二维码,笔者所在公司的产品也不例外。一般二维码编码的URL不会直接放apk而是放中间地址,通过这个中间地址再跳转到apk所在URL,原因大概是有几个: 1.让...

    二维码深入人心,很多App都在官网挂出了可以扫描下载apk的二维码,笔者所在公司的产品也不例外。一般二维码编码的URL不会直接放apk而是放中间地址,通过这个中间地址再跳转到apk所在URL,原因大概是有几个:

         1. 让网址尽可能短:信息越少,二维码的尺寸就可以做得越小,嵌入的LOGO可以更大,识别率也会越高。

         2. 让iPhone和Android通过同一个二维码下载:在这个中间地址根据User Agent提取操作系统,然后根据操作系统来决定跳转到iTunes Store链接、apk下载地址还是产品介绍页面。

         3. 便于数据统计:在这个中间页可加入一些下载量统计功能,虽然也可以通过Webserver的Access Log实现,但中间页的方式显然更简单。

         现在,又多了第4个原因:支持微信扫描。

         笔者在查看访问日志时发现二维码地址被微信扫描时,一般同一个客户端会重复好几次,最后竟然都是用别的浏览器下载的,自己用微信扫了扫才发现扫出来一片空白。

         读者朋友可以拿起Android版微信5.0“扫一扫”百度应用商店里的二维码,不出意外的话也是一片空白的。原来微信“扫一扫”中对apk链接加入了白名单机制,只有腾讯自己域名下的apk才可以通过扫一扫下载。

         那么如何突破这个限制,让微信安卓版能扫描下载你的apk?让微信苹果访问苹果 store?

    一般处理办法就是:遮罩,右上角

    四处寻找,发现基于微信接口开发了一款全新的手机端微信中下载APP的程序,通过这个程序生成的链接,安卓用户在微信中点击的话,是可以直接跳转手机默认浏览器打开下载链接。IOS用户在微信中点击的话会弹出一个遮罩提示用户用浏览器打开下载链接或者是跳转到苹果的APP商店。这样的话大大的减少了用户的操作步骤,使用我们的方法都不会出现微信所谓的捆绑下载。给以用户以良好的下载体验,对我们的推广转化率会有显著的提升。

    wbah8c13.png

    有需要的朋友可以百度:旋风微跳  现在市场上普片使用的跳转都是痛过腾讯的接口跳转到QQ浏览器的,如果用户没有装QQ浏览器的话,就会出现无法打开链接的后果。影响到我们的推广转化率。而我们开发的这款,调用的是手机默认浏览器。也就是手机出厂自带的浏览器。而不是用户自己下载的浏览器。系统写好了判断。这样的话可以就就不用担心用户浏览器的问题了。这样,大家就可以放心大胆的推广自己的产品了!


     

    展开全文
  • H5实现APP下载功能

    千次阅读 2018-09-04 15:03:22
    &lt;a href="... class="button"&gt;立即下载&lt;/a&gt; &lt;a href="https://itunes.apple.com/cn/app/XXXX/id997586276?l=en&am...
  • App下载安装量如何统计

    千次阅读 2021-02-22 18:55:09
    背景和目的 ...进入应用商店下载App->打开激活App->注册登录账号。 这五个步骤分别对应的量化数据是:落地页访问量、下载按钮点击量、App下载量、App安装激活量、App注册量。 通过对这四个指标的跟踪
  • android监听app安装与卸载

    千次阅读 2019-08-16 10:32:15
    许多时候,需要监听到程序是否安装或者卸载成功,在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名。...
  • 就可以利用蓝牙功能进行激活,手环上检测到的数据会和手机实时同步,更方便用户进行查看,用户可以使用乐动健康app记录你每天的步数,也可以观察心率、睡眠情况等信息,有需要的用户赶紧来下载安装吧!乐动健康app...
  • ENVI App Store 下载安装

    千次阅读 2021-07-07 20:17:46
    下载得到的envi_app_store.sav文件拷贝至: C:\Program Files\Exelis\ENVI5x\extensions\ 重新启动 ENVI 通过以下方式可以启动 App Store: Toolbox/Extensions/App Store Help>App Store ————————...
  • h5页面判断是否安装APP,如果安装就拉起APP,否则就下载 if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) { var loadDateTime = new Date(); window.location = "...";//schema链接或者universal ...
  • js判断移动端APP是否安装

    热门讨论 2015-05-13 13:23:06
    js判断移动端APP是否安装 如果安装就打开APP 没有安装就提示下载
  • ios通过浏览器下载安装app

    千次阅读 2021-05-28 10:13:00
    action=download-manifest&url=https://xxxxx.plist 链接方式下载 plist文件(必须为https协议地址) <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE plist PUBLIC '-//Apple//DTD PLIST 1.0//EN' '...
  • 现在的iTunes已经不能管理应用程序了, 而iMazing不但能够给具有文件共享功能的APP传输文档,还可以给设备安装或者卸载APP,极大地方便了使用者对应用程序的管理。
  • Android app内部下载安装

    千次阅读 2020-07-07 17:17:56
    下载成功,开始安装,兼容8.0安装位置来源的权限 public static void installApkO(Activity context, String downloadApkPath) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //是否有安装位置来源...
  • 朵朵直播app下载地址

    千次阅读 2021-06-03 05:28:52
    朵朵直播app下载地址是一款精彩的手机视频直播平台。这里可以免费的看到超多精彩的直播内容,直播包含的类型和风格是很丰富的,你想看的都可以快速找到,画质也都是超级高清的。喜欢的话就不要等待了,快来下载体验...
  • 手机app视频投电视软件下载 精东视频app是一款可以随时让你看直播和精品视频的平台,这里将是你开启幸福生活的地方,当你感到寂寞的时候,就来这里看看直播,看看小姐姐,还可以看好看有趣的视频哦,这里有各种类型...
  • AppStore下载安装失败

    千次阅读 2018-03-01 14:03:16
    APP Store下载应用总会出现如图的情况,总需要重试几次才能下载成功,这是怎么回事?可以试试以下的几个方法,如果还是不能的话,可能就是app服务器正在维护。1:打开设置/Safari/点击—『清除历史记录』『清除...
  • 最近打算学习英语,想在网上找《老友记》视频学习,结果不小心下载了流氓软件。 作为一名资深互联网民工,固然知道怎么删除垃圾软件,清理病毒,但是还是中了招,经过一一排查(将不知名的软件全删除清理一遍),...
  • app安装到ios模拟器

    千次阅读 2022-03-07 15:17:42
    Build and install welab-rn-front-end into iOS simulator Precondition: 1.... brew install yarn ... install xcode andXcodeCommand Line Tools from mac app store, confirm that the version of MacOS,...
  • 尝试打开APP链接,手机已安装APP成功跳转打开APP 手机没有安装APP则跳到应用商城安装页 if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) { var loadDateTime = new Date(); window.setTimeout...
  • h5在浏览器中无法判断出用户是否安装某个app,只是如果用户安装了这个...$(".goBuy").click(function(){//判断微信打开给出提示弹窗,浏览器打开的话,已安装app打开app,没有安装跳转到下载地址 checkOutApp(); ...
  • 苹果app签名TF签名如何下载安装

    千次阅读 2020-11-06 14:21:19
    很多人对苹果app签名都比较陌生,所以我们想要知道苹果app签名怎么使用,首先我们需要知道什么是苹果app签名,苹果app签名主要是为了实现一些上架AppStore的app在苹果手机上的下载安装,很多app开发完成后,由于...
  • 本文介绍了在IOS系统下,App Store无法正常下载安装软件,一直在转圈的一个解决方法。
  • 微软win11最为亮眼的就是windows系统终于可以兼容原生安卓app了,但是很多安装了win11的朋友发现安装不了安卓app,今天小编来跟大家说说win11安装安卓app的步骤教程吧,更多win11教程可以参考小白刷机网 win11安装...
  • Xcode模拟器上安装.app的方法

    千次阅读 2021-12-02 10:46:00
    Xcode模拟器上安装app的方法 (.app) 背景: 因为项目中有用到es6的语法,导致前端页面在低版本系统的ios手机上显示白屏。我这ios11.1系统就开始显示白屏了,由于公司没有这个系统的测试机,只能用 Xcode 模拟机了。 ...
  • app打包时显示app云打包插件安装失败)解决方案HBuilderX插件解压移动到指定目录,需要权限,如果没有权限,插件就会下载、或移动失败。如果您是老版本编辑器,请卸载后安装新版,因为老版本不需要安装这个打包...
  • 首先需要准备一些必要的软件:1 itunes(12.6及以下:因为最新的itunes里面已经把appStore移除了 无奈)2 fidder 一个抓包软件后面会介绍3 itools或者PP助手---用于安装软件到手机上以上软件下载皆可以在相应的...
  • 职教云app是一款非常专业的线上学习教育软件,这款软件中有海量优质教育资源,支持在线观看也可以离线缓存到手机中,没有网络也可以想学就学,大数据实时同步的题库让用户可以随时检验学习的成果,方便查漏补缺,...
  • M1芯片MacBook安装手机app

    万次阅读 2021-01-25 19:28:01
    众所周知M1芯片是arm架构的,也就意味着理论上M1芯片的MacBook可以运行所有的手机app,但是从App Store搜索的iPhone与iPad app十分有限,本文则以抖音为例,给... 选择需要安装app下载(注意app必须是已经在iPh...
  • ios模拟器安装app

    千次阅读 2018-12-14 14:40:32
    xcrun simctl install booted是命令,后面的是需要安装app路径,先去appstore下载或者自己打包编译的ipa,用归档工具打开,拖动playload文件夹下的程序文件到终端即可,按下enter,即可在模拟器上看到安装app ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 449,489
精华内容 179,795
关键字:

下载app 安装

友情链接: MyQQ.rar