如您所知,如果用户单击下载链接,我将从我的服务器下载应用程序。当然,对于安装,用户将接受安装它。因此,我想知道;
- 是否可以从我的服务器下载软件包?如果是怎么办?
是的,有可能。确保您已将服务器配置为使用适当的 mime 类型。
AddType application/vnd.android.package-archive .apk
或者
<a href="apk location" type="application/vnd.android.package-archive">Download App</a>
要在您的应用程序中下载 apk,您可以在此处使用我的开源库。虽然它用于检查和下载更新,但您也可以使用它来下载其他 apk 文件(或任何其他文件)。
在您的活动中,将以下代码添加到您的 onCreate()。如果您不想要 toast 通知,请将第二个参数更改为false
:
UpdateChecker checker = new UpdateChecker(this, true);
然后,使用以下内容下载并安装更新。请注意,这将在下载时显示一个进度对话框:
checker.downloadAndInstall("URL with http:// to the location of the update apk");
如果 Android 框架下载了一个 .apk 文件,它会询问您是否要安装它。就那么简单。
这是下载apk文件的代码:
String fileName="yourApk.apk";
try
{
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath()+"/DownloadedApk/");
if(dir.exists()==false)
{
dir.mkdirs();
}
URL url = new URL("http://www.example.com/apk/yourApk.apk");
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
FileOutputStream fos = new FileOutputStream(dir+"/"+fileName);
byte data[] = new byte[1024];
long lenghtOfFile=ucon.getContentLength();
int count = 0;
long total = 0;
int progress = 0;
while (((count=is.read(data)) != -1))
{
total += count;
int progress_temp = (int) ((int)total*100/lenghtOfFile);
if(progress_temp%10 == 0 && progress != progress_temp)
{
progress = progress_temp;
publishProgress(progress);
}
fos.write(data, 0, count);
}
is.close();
fos.close();
} catch (Exception e)
{
Log.d("DownloadManager", "Error: " + e);
}