Reputation: 11
I am implementing In-App Update feature in my android application, i am unaware about this concept. Can anyone provide me with example. My Requirement is whenever user clicks a button for update app after login it must show a pop up that update is available or not. If available then proceed for Update. TIA
Upvotes: 1
Views: 10051
Reputation: 71
recently i was implemented the google latest In App Update FLEXIBLE type, its very pretty cool. here i added the button onClickListener, it tells the whether update is available are not and must be api version 21 and above otherwise it won't work.
private AppUpdateManager appUpdateManager;
private static final int MY_REQUEST_CODE = 17326;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkUpdate();
}
});
}
private void checkUpdate(){
appUpdateManager = AppUpdateManagerFactory.create(this);
appUpdateManager.registerListener(listener);
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
@Override
public void onSuccess(AppUpdateInfo appUpdateInfo) {
Log.d("appUpdateInfo :", "packageName :"+appUpdateInfo.packageName()+ ", "+ "availableVersionCode :"+ appUpdateInfo.availableVersionCode() +", "+"updateAvailability :"+ appUpdateInfo.updateAvailability() +", "+ "installStatus :" + appUpdateInfo.installStatus() );
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed(FLEXIBLE)){
requestUpdate(appUpdateInfo);
Log.d("UpdateAvailable","update is there ");
}
else if (appUpdateInfo.updateAvailability() == 3){
Log.d("Update","3");
notifyUser();
}
else
{
Toast.makeText(MainActivity.this, "No Update Available", Toast.LENGTH_SHORT).show();
Log.d("NoUpdateAvailable","update is not there ");
}
}
});
}
private void requestUpdate(AppUpdateInfo appUpdateInfo){
try {
appUpdateManager.startUpdateFlowForResult(appUpdateInfo,AppUpdateType.FLEXIBLE,MainActivity.this,MY_REQUEST_CODE);
resume();
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MY_REQUEST_CODE){
switch (resultCode){
case Activity.RESULT_OK:
if(resultCode != RESULT_OK){
Toast.makeText(this,"RESULT_OK" +resultCode, Toast.LENGTH_LONG).show();
Log.d("RESULT_OK :",""+resultCode);
}
break;
case Activity.RESULT_CANCELED:
if (resultCode != RESULT_CANCELED){
Toast.makeText(this,"RESULT_CANCELED" +resultCode, Toast.LENGTH_LONG).show();
Log.d("RESULT_CANCELED :",""+resultCode);
}
break;
case ActivityResult.RESULT_IN_APP_UPDATE_FAILED:
if (resultCode != RESULT_IN_APP_UPDATE_FAILED){
Toast.makeText(this,"RESULT_IN_APP_UPDATE_FAILED" +resultCode, Toast.LENGTH_LONG).show();
Log.d("RESULT_IN_APP_FAILED:",""+resultCode);
}
}
}
}
InstallStateUpdatedListener listener = new InstallStateUpdatedListener() {
@Override
public void onStateUpdate(InstallState installState) {
if (installState.installStatus() == InstallStatus.DOWNLOADED){
Log.d("InstallDownloded","InstallStatus sucsses");
notifyUser();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
appUpdateManager.unregisterListener((InstallStateUpdatedListener) this);
}
private void notifyUser() {
Snackbar snackbar =
Snackbar.make(findViewById(R.id.message),
"An update has just been downloaded.",
Snackbar.LENGTH_INDEFINITE);
snackbar.setAction("RESTART", new View.OnClickListener() {
@Override
public void onClick(View view) {
appUpdateManager.completeUpdate();
}
});
snackbar.setActionTextColor(
getResources().getColor(R.color.snackbar_action_text_color));
snackbar.show();
}
private void resume(){
appUpdateManager.getAppUpdateInfo().addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
@Override
public void onSuccess(AppUpdateInfo appUpdateInfo) {
if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED){
notifyUser();
}
}
});
}
Upvotes: 2
Reputation: 31
best way for handle pop up dialogue for update app that you should us remote confige section in fire base . first add firebase requirement to your app then add remote config library to dependency . you can defind key and value in firebase console and fetch it in your splash activity or something like this . check version name application with this value that fetch from remote config and compare two version . if two string is not equal , you should show dialogue for update app.
Upvotes: 2
Reputation: 6277
Google Provides an official solution for this now
Use AppUpdateManager
from the official documentation
Check for update availability
Before requesting an update, you need to first check if one is available for your app. To check for an update, use AppUpdateManager, as shown below:
// Creates instance of the manager. AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context); // Returns an intent object that you use to check for an update. Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo(); // Checks that the platform will allow the specified type of update. appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> { if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE // For a flexible update, use AppUpdateType.FLEXIBLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) { // Request the update. } });
The result contains the update availability status. If an update is available and the update is allowed, the returned AppUpdateInfo also contains an intent to start the update. See the next section for how to start the update.
If an in-app update is already in progress, the result will also report the status of the in-progress update.
For the complete procedure read in-app-updates
Upvotes: 2