如何以编程方式从github下载apk?

时间:2018-06-17 13:29:08

标签: android github download

我在github上有一个我的项目的示例apk,我试图做一些自动更新的东西。但是在通过`

加载github时似乎有一些重定向
            URL url = new URL("https://raw.github.com/user/repository/branch/filename");

            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();` 

我的应用无法下载应用并提示安装。

我尝试在我的代码https://github.com/user/repository/raw/branch/filename中使用这种格式,但它在我的代码中不起作用,但在浏览器中打开时有效。

这是我的代码

class DownloadNewVersion extends AsyncTask<String,Integer,Boolean> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        bar = new ProgressDialog(MainActivity.this);
        bar.setCancelable(false);
        bar.setMessage("Downloading...");

        bar.setIndeterminate(true);
        bar.setCanceledOnTouchOutside(false);
        bar.show();

    }

    protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);

        bar.setIndeterminate(false);
        bar.setMax(100);
        bar.setProgress(progress[0]);
        String msg = "";
        if(progress[0]>99){

            msg="Finishing... ";

        }else {

            msg="Downloading... "+progress[0]+"%";
        }
        bar.setMessage(msg);

    }
    @Override
    protected void onPostExecute(Boolean result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        bar.dismiss();

        if(result){

            Toast.makeText(getApplicationContext(),"Download Succesfull!",
                    Toast.LENGTH_LONG).show();

        }else{

            Toast.makeText(getApplicationContext(),"Error: Try Again",
                    Toast.LENGTH_SHORT).show();

        }

    }

    @Override
    protected Boolean doInBackground(String... arg0) {
        Boolean flag = false;

        try {


            URL url = new URL("https://raw.github.com/user/repository/branch/filename");

            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();


            String PATH = Environment.getExternalStorageDirectory()+"/Download/";
            File file = new File(PATH);
            file.mkdirs();

            File outputFile = new File(file,"myapp.apk");

            if(outputFile.exists()){
                outputFile.delete();
            }

            FileOutputStream fos = new FileOutputStream(outputFile);
            InputStream is = c.getInputStream();


            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);
            }
            fos.close();
            is.close();

            OpenNewVersion(PATH);

            flag = true;
        } catch (Exception e) {
            Log.e(TAG, "Update Error: " + e.getMessage());
            flag = false;
        }
        return flag;

    }

}

void OpenNewVersion(String location) {

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(new File(location + "myapp.apk")),
            "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

}

0 个答案:

没有答案