码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android13 下载apk并安装apk


    下载代码

    private void handleUpdate(String code, String file_path) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 提示用户有新版本
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("发现新版本")
                        .setMessage("新版本:是否立即下载?")
                        .setPositiveButton("下载", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        downloadFile(file_path);
                                    }
                                }).start();
                            }
                        })
                        .setNegativeButton("取消", (new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                            }
                        }))
                        .show();
            }
        });
    
     }
    

    downloadFile代码
    需要下载okhttp

    implementation ‘com.squareup.okhttp3:okhttp:4.10.0’

    private void downloadFile(String URL) {
        OkHttpClient client = new OkHttpClient();
    
        Request request = new Request.Builder()
                .url(URL)
                .build();
    
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
    
            // Write theResponseBody in entirety to the destination.
            BufferedSink sink = Okio.buffer(Okio.sink(new File(getFilesDir().getAbsolutePath() + "/apk.apk")));
            sink.writeAll(response.body().source());
            sink.close();
            installApk(getFilesDir().getAbsolutePath() + "/apk.apk");
        } catch (Exception e) {
        }
    
    }
    

    安装APK installApk

    private void installApk(String filePath) {
        File file = new File(filePath);
        Uri contentUri = FileProvider.getUriForFile(
                this,
                BuildConfig.APPLICATION_ID + ".fileprovider",
                file);
    
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        startActivity(intent);
    }
    

    在AndroidManifest.xml里添加

    <provider
       android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
    

    在xml里新建file_paths.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <files-path
            name="my_files_dir"
            path="/" />
    </paths>
    
  • 相关阅读:
    Go学习第八章——面向“对象”编程(入门——结构体与方法)
    Revit SDK:CreateFillPattern 创建填充样式
    shouldComponentUpdate 是做什么的?
    Python面试1-50题汇总,都是常问的面试题!
    2022年6月21日cloudflare 故障宕机事件记录 恭喜CF凭借一己之力,拉闸全球50%网络分发
    10、Mysql高级
    网络安全观察国外政策法规大事件
    JavaScript+css实现的动态生成3D树效果html页面前端源码
    闭关之现代 C++ 笔记汇总(二):特性演化
    winform车辆管理系统VS开发sqlserver数据库CS结构c#编程源码程序
  • 原文地址:https://blog.csdn.net/qq_34605417/article/details/142261405
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号