Skip to main content

How to Download Apk file from Url and Install Programmatically

In this post we learn about download apk file from server or website and then install it Programmatically in Phone.

Sometimes we have to download external apk file from server and then install if downloading successfully finished.For this we use AsyncTask class  for background process. So here is Code Snippet for this task.Lets Start :-


Before this we have to add these Permissions in Manifest.xml file :

 <uses-permission android:name="android.permission.INTERNET" />  
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  

DownloadNewVersion.java

 class DownloadNewVersion extends AsyncTask<String,Integer,Boolean> {  
     @Override  
     protected void onPreExecute() {  
       super.onPreExecute();  
       bar = new ProgressDialog(getActivity());  
       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(getActivity().getApplicationContext(),"Done!!", Toast.LENGTH_SHORT).show();  
       }else{  
         Toast.makeText(getActivity().getApplicationContext(),"Error: Try Again", Toast.LENGTH_SHORT).show();  
       }  
     }  
     @Override  
     protected Boolean doInBackground(String... arg0) {  
       Boolean flag = false;  
       try {  
         URL url = new URL("http://urlname.com/ApkName.apk");  
         HttpURLConnection c = (HttpURLConnection) url.openConnection();  
         c.setRequestMethod("GET");  
         c.setDoOutput(false);  
         c.connect();  
         String PATH = Environment.getExternalStorageDirectory()+"/Download/";  
         File file = new File(PATH);  
         file.mkdirs();  
         File outputFile = new File(file,"ApkName.apk");  
         if(outputFile.exists()){  
           outputFile.delete();  
         }  
         FileOutputStream fos = new FileOutputStream(outputFile);  
         InputStream is = c.getInputStream();  
         int total_size = 4581692;//size of apk  
         byte[] buffer = new byte[1024];  
         int len1 = 0;  
         int per = 0;  
         int downloaded=0;  
         while ((len1 = is.read(buffer)) != -1) {  
           fos.write(buffer, 0, len1);  
           downloaded +=len1;  
           per = (int) (downloaded * 100 / total_size);  
           publishProgress(per);  
         }  
         fos.close();  
         is.close();  
         OpenNewVersion(PATH);  
         flag = true;  
       } catch (Exception e) {  
         Log.e(TAG, "Update Error: " + e.getMessage());  
         e.printStackTrace();  
         flag = false;  
       }  
       return flag;  
     }  
   }  
   void OpenNewVersion(String location) {  
     Uri uri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider",new File(location+"ApkName.apk"));  
     Intent intent = new Intent(Intent.ACTION_VIEW);  
     intent.setDataAndType(uri, "application/vnd.android.package-archive");  
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
     intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);  
     getContext().startActivity(intent);  
   }  

 and finally call this from wherever you want like this:

new DownloadNewVersion ().execute();


It will automatically download apk file from url and install if it finish its downloading task.

That's all you need Thank you for Your time .keep coding and Keep Sharing.

Comments

Post a Comment

Popular posts from this blog

Auto read OTP using SMS User Consent API in Android

Some times ago Google Play restricts the use of high risk or sensitive permissions, including the SMS or Call Log permission groups. It means you have to justify why you are taking SMS or other high risk or sensitive permissions for your application .For this you may be required to complete the Permissions Declaration Form and receive approval from Google Play. Before this every app even who does not have any purpose for taking SMS or other high sensitive permissions in their app ,They was taking these permissions from users and this is a kind of security beach.  For solution of this problem Google introduce SMS User Consent API . The SMS User Consent API complements the SMS Retriever API by allowing an app to prompt the user to grant access to the content of a single SMS message. When a user gives consent, the app will then have access to the entire message body to automatically complete SMS verification. If your appeal for SMS permission is rejected by Google team you can u...

Solution of Image not Loaded or Auto Suggestions not working in Android Studio

Sometimes we face issue when some images are not loaded or showing in Android Studio . It shows that image not loaded try to open it externally to fix format problem .It cause when some gradle files are corrupted. also if you try auto suggestions not working in xml layout files like  you can try Invalidate Caches and Restart in Android Studio's File Menu option but you will get no result . So here are some steps to follow to remove this type of problem: Step 1: Close your Android Studio Completely. Go to your User Folder - on Windows 7/8 this would be: [SYSDRIVE]:\Users[your username] (ex. C:\Users\DroidMedium\) there you find a folder with name .AndroidStudio3.5  *( i am using Android Studio 3.5.1 version your version may be different according to your Android Studio version) open this folder now you will find two folders Go to System folder  C:\Users\DroidMedium\.AndroidStudio3.5\System\ Step 2: Now under System Folder you will find Caches folder Delete the Folder Com...