我正在构建一个私有企业Android应用程序。我的目标是检测何时有可用更新并提供用户下载。如果用户选择下载更新文件,则会显示android app install提示符。
我成功检查了更新,问题是没有下载apk文件(创建空文件)因此“解析包时出现问题”。错误显示在Android应用安装提示中。
代码:
public void downloadfileto(String fileurl, String filename) {
String myString;
try {
FileOutputStream f = new FileOutputStream(filename);
try {
URL url = new URL(fileurl);
URLConnection urlConn = url.openConnection();
InputStream is = urlConn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is, 8000);
int current = 0;
while ((current = bis.read()) != -1) {
f.write((byte) current);
}
} catch (Exception e) {
myString = e.getMessage();
}
f.flush();
f.close();
install(filename);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
protected void install(String fileName) {
Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(new File(fileName)),
"application/vnd.android.package-archive");
startActivity(install);
}
使用以下命令调用函数downloadfileto:
downloadfileto("http://some-url/ind.apk", "data/data/my.package.name/app.apk");
答案 0 :(得分:1)
即使您成功下载,也无法安装APK文件,因为安装程序进程将无法读取该文件。此外,正如克里斯·斯特拉顿指出的那样,你的硬编码路径是邋((在Android 4.1及更早版本上)和灾难性的(在Android 4.2及更高版本上)。
就下载逻辑而言,一次下载一个字节不太可能表现良好。尝试这样的事情(对于名为File
的{{1}}和名为output
的{{1}}):
URL
答案 1 :(得分:1)
我要感谢大家的帮助。我通过在服务器上打开php脚本解决了这个问题,该脚本使用Web视图计算下载,检测下载,下载路径并启动安装应用程序的活动。
文件名始终采用“ind-version.apk”形式(例如:ind-1-0.apk),因为当我检查更新时,我得到了新更新的版本号,我决定把它放在附加内容中用它来确定文件名。
代码:
WebView myWebView = (WebView) findViewById(R.id.helpview);
showDialog();
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl(url);
myWebView.getSettings().setJavaScriptEnabled(false);
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
dismissDialog();
}
});
myWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
Bundle extras = getIntent().getExtras();
String v = extras.getString("v");
v = v.replace(".", "-");
Log.i("File", v);
File loc = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
Log.i("File", loc.toString() + "/ind-" + v + ".apk");
install(loc.toString() + "/ind-" + v + ".apk");
}
});
并安装:
protected void install(String fileName) {
Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(new File(fileName)),
"application/vnd.android.package-archive");
startActivity(install);
}