Android版本更新下載apk自動安裝的方法

程序中XXXX部分和//TODO部分根據(jù)具體項目進行修改和完善。

public class UpdateHelper {
    private static final String TAG = "UpdateHelper";
    private static final String FILE_PROVIDER_AUTHORITY = "XXXX";
    private static final String DATA_AND_TYPE = "application/vnd.android.package-archive";
    private static final String UPDATE_URL = "XXXX";

    public static boolean checkForUpdated(Context context) {
        boolean updated = false;
        try {
            int currentVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
       //TODO 獲取服務端最新版本號,與currentVersion做比較
        return updated;
    }

    public static void autoInstallUpdate(final Context context) {
        OkGo.<File>get(UPDATE_URL).tag(context).execute(new FileCallback() {
            @Override
            public void onSuccess(Response<File> response) {
                File file = response.body();
                setPermission(file.getPath());
                installApk(context, file.getPath());
            }

            @Override
            public void onError(Response<File> response) {
                super.onError(response);
                //TODO 網(wǎng)絡請求出錯
            }

            @Override
            public void onFinish() {
                super.onFinish();
                //TODO 網(wǎng)絡請求結束
            }

            @Override
            public void downloadProgress(Progress progress) {
                super.downloadProgress(progress);
                int fraction = (int) (progress.fraction * 100);
                //TODO 下載中,顯示下載進度
            }
        });
    }

    private static void installApk(Context context, String apkPath) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        File file = new File(apkPath);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
            Uri apkUri = FileProvider.getUriForFile(context, FILE_PROVIDER_AUTHORITY, file);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setDataAndType(apkUri, DATA_AND_TYPE);
        } else {
            Uri apkUri = Uri.fromFile(file);
            intent.setDataAndType(apkUri, DATA_AND_TYPE);
        }
        context.startActivity(intent);
    }

    private static void setPermission(String filePath) {
        String command = "chmod " + "777" + " " + filePath;
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec(command);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,828評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評論 19 139
  • 幸福路人春風20180222第263天 大千世界,不會有兩片紋理相同的樹葉,也不會有兩段完全一樣的人生。你的人生自...
    春風7861閱讀 215評論 0 0
  • 文/麻老將 “剛子,回來吃飯,”聽見奶奶一如往常平和的嗓音,我抖抖在石墩上蹲久了有些發(fā)麻的腿,走進了這座無時無刻不...
    朝外閱讀 412評論 0 1
  • 很多人都會在幾年后重逢的時候說上一句“你的變化真大?。 薄5钦l又能說自己沒有變過呢?那么人為什么要改變呢,從瓜瓜...
    我的夢想是吃花生閱讀 183評論 0 1

友情鏈接更多精彩內容