[英]Android DownloadManager - Download apk and install it
我到处都在寻找如何下载不是从市场上下载的APK。 APK已存储在我的服务器中。 所有样本均无效。
我希望我的应用为我的服务器下载一个APK,并提示用户安装它。
到目前为止,我设法将apk下载到用户sd上。 但我无法知道他的路径在哪里保存并开始安装。
private void downloadAPK() {
String url="https://www.example.com/app.apk”;
downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
request = new Request(Uri.parse(url));
request.setTitle(“My App“);
enqueue = downloadManager.enqueue(request);
new Thread(new Runnable() {
@Override
public void run() {
boolean downloading = true;
while (downloading) {
try {
Thread.sleep(10000);
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(enqueue);
Cursor cursor = downloadManager.query(q);
cursor.moveToFirst();
int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
downloading = false;
}
final int dl_progress = (int) ((double)bytes_downloaded / (double)bytes_total * 100f);
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("Prog", Integer.toString(dl_progress));
}
});
cursor.close();
} catch (InterruptedException e) {
}
}
}
}).start();
}}
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
Log.w(“”, “Downloaded”)
}
else {
//do something here
}
}
};
onCreate ...
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
根据文档,您可以指定要保存文件的位置。 您所要做的就是在将请求设置为DownloadManager之前添加此行:
request.setDestinationInExternalFilesDir (context, dirType, subPath);
您可以使用以下代码查询下载的本地文件:
请注意:如果下载失败,将返回null。
String path = Uri.parse(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))).getPath()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.