序文
多くの企業の開発が完了した後のAppのAppストアの棚に行くが、後のものはまた、定期的なメンテナンスアップデートを必要としないことがあり、我々はあなたのサーバーにパッケージ化されたAPKを公開することを選択し、その後、データベースのバージョン番号にテーブルを作成します、その後、残りは検出アップデートを達成するために自分自身のアンドロイド、アンドロイドのバージョンを開発するためにあなた次第です、原因アンドロイドは、多くのコードを書き、およびその他の関連するダウンロードはありませんあなたは非常にシンプルになり、それらを使用して、ダウンロードの機能を実現することができDownloadManagerが来ますしかし、通知バー通知にいくつかをダウンロードするには、手動のユーザーは、いくつかがインストールされた状態に身をダウンロードし、インストールする]をクリックし、ユーザーはそれだけでインストールを確認する必要がありますが、原因システムと下位バージョンの高いバージョンの自動番号へ別のインストール。
アンドロイド7.0以下、自動的にポップインストールインターフェイスをダウンロードした後、プロンプトはインストールします。
Androidの上記7.0とし、ダウンロードが自動的にインストールインターフェイスをポップではありません後。
テキスト
ダウンロード、Utilのツール、静的メソッドとトップdownLoadApk()、および要求のバージョン番号を比較するが、ここでは省略されます。
/**
* 更新下载apk
* @param context 上下文对象
* @param title 程序的名字
* @param url 下载的url地址
*
*/
public static long downLoadApk(Context context,String title,String url){
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS,"ausee.apk");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// 设置 Notification 信息
request.setTitle(title);
request.setDescription("下载完成后请点击打开");
request.setVisibleInDownloadsUi(true);
request.allowScanningByMediaScanner();
request.setMimeType("application/vnd.android.package-archive");
// 实例化DownloadManager 对象
DownloadManager downloadManager = (DownloadManager) MyApp.getContext().getSystemService(Context.DOWNLOAD_SERVICE);
final long refrence = downloadManager.enqueue(request);
return refrence;
}
上記の静的メソッドは、URLがOKに渡す、ダウンロード達成することができ、ここで、残りに対処するためだ、我々は、上記の方法は、long型の値を返すことに注意してください、
私たちは、戻り値を取得するには、活動のこのメソッドを呼び出して、その後、ラジオ受信機の活動の内部を構築し、戻り値はDownloadManager上にあるので、IDの復帰後にダウンロードをダウンロードすると、各ダウンロードタスクの意志が付属していますリスナー(ID)、および無線受信機を構築し、次のように復帰する一意のID、およびブロードキャストを送信しますが、ここでIは、活動方法を定義します。
private void listener(final long Id) {
// 注册广播监听系统的下载完成事件。
IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
DownloadManager manager = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
// 这里是通过下面这个方法获取下载的id,
long ID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
// 这里把传递的id和广播中获取的id进行对比是不是我们下载apk的那个id,如果是的话,就开始获取这个下载的路径
if (ID == Id) {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(Id);
Cursor cursor = manager.query(query);
if (cursor.moveToFirst()){
// 获取文件下载路径
String fileName = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
// 如果文件名不为空,说明文件已存在,则进行自动安装apk
if (fileName != null){
openAPK(fileName);
}
}
cursor.close();
}
}
};
registerReceiver(broadcastReceiver, intentFilter);
}
インストール、自動インストールウィンドウポップ
/**
* 安装apk
* @param fileSavePath
*/
private void openAPK(String fileSavePath){
File file=new File(Uri.parse(fileSavePath).getPath());
String filePath = file.getAbsolutePath();
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//判断版本大于等于7.0
// 生成文件的uri,,
// 注意 下面参数com.ausee.fileprovider 为apk的包名加上.fileprovider,
data = FileProvider.getUriForFile(LoginActivity.this, "com.ausee.fileprovider", new File(filePath));
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);// 给目标应用一个临时授权
} else {
data = Uri.fromFile(file);
}
intent.setDataAndType(data, "application/vnd.android.package-archive");
startActivity(intent);
}
fileproviderファイル
その上に上記の基本は、それパラメータcom.ausee.fileprovider上、これは、次のような構成に注意すべきです。
XMLという名前のフォルダ内の最初の新しいプロジェクトのresファイルには、新しいXMLファイルの後:file_paths.xml。
XMLコンテンツは次のよう:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="name" path="."/>
</paths>
マニフェストファイル
ここに書かれた後に、マニフェストプロバイダーラベルの内部で、次の構成:あなたが書くことができるように:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.ausee.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
当局=「com.ausee.fileprovider」(独自のパッケージ名のcom.ausee)、および同じの前でその引数の内容、右:上記のアンドロイド近くで見ますか?ここにいるので、ここでの内容はとても満たされ、それに加えて上fileproviderパッケージ名、およびその後、構成XMLファイル内のメタデータにだけ開かれた構成が来ることができています!
完成!!!
オリジナルリンクします。https://blog.csdn.net/I123456789T/article/details/81584352