Display AlertDialog for Latest Update of an Android Application

While using your smartphones you must have gone through a situation where an app asks the user to update it to use it further. Here, we are going to implement the same and see how an app asks users to update it by showing an update alert dialog.
What we are going to build in this application?
Here is a sample video of what we are going to implement in this application. Note that we are going to use java language for this project.
Step by Step Implementation
Step 1: Create a New Project
- Open a new project.
 - We will be working on Empty Activity with language as Java. Leave all other options unchanged.
 - Name the application at your convenience.
 - There will be two default files named activity_main.xml and MainActivity.java.
 
If you don’t know how to create a new project in Android Studio then you can refer to How to Create/Start a New Project in Android Studio?Â
Step 2. Adding required dependency
Navigate to Gradle Scripts > gradle.scripts(module) and add the following dependency in it
implementation 'org.jsoup:jsoup:1.10.2'
Step 3. Adding Internet Permission
Navigate to the AndroidManifest.xml file and add the following permission to it-
<uses-permission android:name="android.permission.INTERNET"/>
Step 4. Working on XML file
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.
XML
<?xml version="1.0" encoding="utf-8"?><LinearLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:gravity="center"    tools:context=".MainActivity">      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Current Version"        android:textSize="32sp"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv_current_version"        android:textSize="32sp"        android:textStyle="bold"        android:layout_marginTop="4dp"/>        <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Latest Version"        android:textSize="32sp"/>        <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv_latest_version"        android:textSize="32sp"        android:textStyle="bold"        android:layout_marginTop="4dp"/>  </LinearLayout> | 
Step 5. Working on Java file
Navigate to the MainActivity.java file and use the following code in it. Comments are added to the code to have a better understanding.
Java
package com.example.updatealertdialog;  import androidx.appcompat.app.AlertDialog;import androidx.appcompat.app.AppCompatActivity;  import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.os.AsyncTask;import android.os.Build;import android.os.Bundle;import android.widget.TextView;  import org.jsoup.Jsoup;  import java.io.IOException;  public class MainActivity extends AppCompatActivity {      // Initialize variables    TextView tvCurrentVersion,tvLatestVersion;    String sCurrentVersion,sLatestVersion;      @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);          // Assign variables        tvCurrentVersion=findViewById(R.id.tv_current_version);        tvLatestVersion=findViewById(R.id.tv_latest_version);          // Get latest version from play store        new GetLatestVersion().execute();    }      private class GetLatestVersion extends AsyncTask<String,Void,String> {          @Override        protected String doInBackground(String... strings) {            try {                sLatestVersion= Jsoup                        .connect("https://play.google.com//store/apps/details?id="                        +getPackageName())                        .timeout(30000)                        .get()                        .select("div.hAyfc:nth-child(4)>"+                                "span:nth-child(2) > div:nth-child(1)"+                                "> span:nth-child(1)")                        .first()                        .ownText();            } catch (IOException e) {                e.printStackTrace();            }              return sLatestVersion;        }          @Override        protected void onPostExecute(String s) {            // Get current version            sCurrentVersion=BuildConfig.VERSION_NAME;            // Set current version on Text view            tvCurrentVersion.setText(sCurrentVersion);            // Set latest version on TextView            tvLatestVersion.setText(sLatestVersion);              if(sLatestVersion != null)            {                // Version convert to float                float cVersion=Float.parseFloat(sCurrentVersion);                float lVersion=Float.parseFloat(sLatestVersion);                  // Check condition(latest version is                  // greater than the current version)                if(lVersion > cVersion)                {                    // Create update AlertDialog                    updateAlertDialog();                }            }        }    }      private void updateAlertDialog() {        // Initialize AlertDialog        AlertDialog.Builder builder=new AlertDialog.Builder(this);        // Set title        builder.setTitle(getResources().getString(R.string.app_name));        // set message        builder.setMessage("UUpdate Available");        // Set non cancelable        builder.setCancelable(false);          // On update        builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {                // Open play store                startActivity(new Intent(Intent .ACTION_VIEW,                        Uri.parse("market://details?id"+getPackageName())));                // Dismiss alert dialog                dialogInterface.dismiss();            }        });          // on cancel        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {                // cancel alert dialog                dialogInterface.cancel();            }        });          // show alert dialog        builder.show();    }} | 
Here is the final output of our application.
Output:
				
					


