Androidアプリ自動アップデートまとめ(9-0対応)、Androidメッセージメカニズムの原理についての話

Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.REQUEST_INSTALL_PACKAGES})
protected void checkUpdate() { showLoadingDialog("更新プログラムを確認しています..."); version = AppUpdateUtil.getAppVersionCode(this);// 現在のバージョン番号を確認します// 呼び出しMethod,, 、インターフェイスの特定の実装、渡されたパラメーターを受け取り、独自のメソッドを調整します。requestAppUpdate(version, new DataRequestListener() { @Override public void success(UpdateAppBean data) { // json が返された場合、getStatusが 0 の場合、apk ファイルのダウンロードに移動します。apk ファイルをダウンロードする方法は次のとおりですupdateApp(data.getData().getApk_url()); }








@Override
public void failed(String msg) { // getStatus が 1 の場合、json が返され、プロンプト: 「すでに最新バージョンです!」SToast(msg); dismissLoadingDialog(); } }); }





//バージョン番号を確認し、最初のリクエスト(ポスト)、、、UpdateAppBean が
プライベート void requestAppUpdate(int version, Final DataRequestListener リスナー) を生成 { OkGo.post(Const.HOST_URL + Const.UPDATEAPP).params(“version ", version ).execute(new StringCallback() { @Override public void onSuccess(Response response) { Gson gson = new Gson(); UpdateAppBean updateAppBean = gson.fromJson(response.body(), UpdateAppBean.class); if ( updateAppBean.getStatus () == 0) { リスナー.success(updateAppBean); } else { リスナー.fail(updateAppBean.getMsg()); } }










@Override
public void onError(Response response) { listener.fail("サーバー接続に失敗しました"); dismissLoadingDialog(); } }); }




// 新しいバージョンがある場合は、新しいバージョンがあることを通知し、apk ファイルをダウンロードします。
private void updateApp(String apk_url) { dismissLoadingDialog(); DialogUtils.getInstance().showDialog(this, "新しいバージョンが見つかりました,アップデートをダウンロードしますか?" , new DialogUtils.DialogListener() { @Override public voidpositiveButton() { downloadApp(apk_url); } }); }








//apk ファイルをダウンロードしてジャンプします (2 番目のリクエスト、get)
private void downloadApp(String apk_url) { OkGo.get(apk_url).tag(this).execute(new FileCallback() { @Override public void onSuccess(Response response) { String filePath = response.body().getAbsolutePath(); Intenttent = IntentUtil.getInstallAppIntent(mContext, filePath); // ここでのテストでは stratactivityforresult ではなく startactivity を使用する必要がありますmContext.startActivity(intent); dismissLoadingDialog() ; mDownloadDialog.dismiss (); mDownloadDialog=null; }










@Override
public void downloadProgress(Progress progress) { // showDownloadDialog(); // mProgress.setProgress((int) (progress.fraction * 100)); if (mDownloadDialog == null) { // ソフトウェア ダウンロード ダイアログ ボックスを構築するAlertDialog .Builder builder = new AlertDialog.Builder(mContext); builder.setTitle("Updating"); // ダウンロード ダイアログに進行状況バーを追加しますFinal LayoutInflater inflater = LayoutInflater.from(mContext); View v = inflater.inflate( R .layout.item_progress, null); mProgress = (ProgressBar) v.findViewById(R.id.update_progress); builder.setView(v); mDownloadDialog = builder.create(); mDownloadDialog.setCancelable(false); mDownloadDialog.show ();















mProgress.setProgress((int) (progress.fraction * 100)) ;
}
});
}

2.2 データリクエストリスナー:

public Interface DataRequestListener { //リクエスト成功void success(T data); //リクエスト失敗 void failed(String msg); }




次はツール クラスです。github からの参照、https://github.com/vondear/RxTool

2.3 AppUpdateUtil:

/**
* アプリのバージョン コードを取得
*
* @param context context
* @return アプリのバージョン コード
*/
public static int getAppVersionCode(Context context) { return getAppVersionCode(context, context.getPackageName()); }

2.4 目的の利用:

パブリック クラス IntentUtil {

/**
* アプリをインストールするインテントを取得します (7.0 をサポート)
*
* @param context
* @param filePath
* @return
*/
public static Intent getInstallAppIntent(Context context, String filePath) { //apk ファイルのローカル パスFile apkfile = new File(filePath); if (!apkfile.exists()) { return null; }インテントテント = new Intent(Intent.ACTION_VIEW); Uri contentUri = FileUtil.getUriForFile(context, apkfile); tent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) ) ; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {








学習の共有

現在の情報共有の時代では、インターネット上で多くのリソースを見つけることができます。それは、あなたがそれを見つける意欲があるかどうか、そしてそれを見つける方法にかかっています。

情報を持っていない友人も少なくありませんが、数十G、数百Gを持っている人がほとんどですが、整理されておらず、読み方も分からず、読んだ後も忘れてしまいます。

インターネットで見つけた情報が非常に乱雑で体系化されていないと感じられる場合は、より体系的で、通常は自分で勉強するためのセットも共有します。

2020年最新の大昌面接質問数万ページ

学習教材の 7 つのモジュール: NDK モジュール開発、Android フレームワーク アーキテクチャなど...

体系的かつ方向性のある学習のみが、一定期間内にスキルを迅速に向上させることができます。

この学習ノートのシステムは群衆に適しています。
まず、学習知識が比較的断片的であり、合理的な学習ルートや高度な方向性がありません。
第二に、数年間開発を行ってきましたが、さらに前進する方法がわからず、非常に混乱しています。
第三に、適切な年齢ではありますが、経営を変革するのか、技術研究を強化するのか、将来どのように発展していくべきかわかりません。必要なら、ここに理由があるだけなので、取りに来ないでください! もしかしたら、あなたの今の状態が変わるかもしれません!

この学習ノートのシステムは群衆に適しています。
まず、学習知識が比較的断片的であり、合理的な学習ルートや高度な方向性がありません。
第二に、数年間開発を行ってきましたが、さらに前進する方法がわからず、非常に混乱しています。
第三に、適切な年齢ではありますが、経営を変革するのか、技術研究を強化するのか、将来どのように発展していくべきかわかりません。必要なら、ここに理由があるだけなので、取りに来ないでください! もしかしたら、あなたの今の状態が変わるかもしれません!
記事の内容が多く、スペースに限りがあるため、一部表示されていない内容をスクリーンショットで表示します。完全なドキュメントを入手する必要がある場合は、私のGitHubをクリックして無料で入手してください。

おすすめ

転載: blog.csdn.net/m0_66264630/article/details/123002113