下载apk并在android应用程序中启动安装提示

时间:2012-12-09 17:56:21

标签: android

我正在构建一个私有企业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");

2 个答案:

答案 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);
}