前提・実現したいこと
Android公式ドキュメントを参照しながら、
強制アップデートを自作アプリに実装しています。
しかし、ダイアログが表示されたり、表示されなかったりするバグが起きています。
該当のソースコード
java
1import android.content.Intent; 2import android.content.IntentSender; 3import android.os.Bundle; 4import android.os.Handler; 5import android.support.annotation.Nullable; 6import android.support.v7.app.AppCompatActivity; 7import android.util.Log; 8import android.view.View; 9import android.view.WindowManager; 10 11import com.google.android.play.core.appupdate.AppUpdateInfo; 12import com.google.android.play.core.appupdate.AppUpdateManager; 13import com.google.android.play.core.appupdate.AppUpdateManagerFactory; 14import com.google.android.play.core.install.model.AppUpdateType; 15import com.google.android.play.core.install.model.UpdateAvailability; 16import com.google.android.play.core.tasks.Task; 17import com.kiyokiyo.proteincalenderapp.R; 18import com.kiyokiyo.proteincalenderapp.constants.AppConstants; 19 20import static com.google.android.play.core.install.model.AppUpdateType.IMMEDIATE; 21 22public class SplashActivity extends AppCompatActivity { 23 24 private Handler mHandler; 25 private static final int MY_REQUEST_CODE = 1111; 26 private AppUpdateManager appUpdateManager; 27 28 @Override 29 protected void onCreate(@Nullable Bundle savedInstanceState) { 30 super.onCreate(savedInstanceState); 31 32 appUpdateManager = AppUpdateManagerFactory.create(this); 33 Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo(); 34 35 appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> { 36 if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE 37 && appUpdateInfo.isUpdateTypeAllowed(IMMEDIATE)) { 38 39 try { 40 appUpdateManager.startUpdateFlowForResult( 41 appUpdateInfo, 42 AppUpdateType.IMMEDIATE, 43 this, 44 MY_REQUEST_CODE); 45 46 } catch (IntentSender.SendIntentException e) { 47 e.printStackTrace(); 48 } 49 } 50 }); 51 52 //スプラッシュActivityをセットする処理 53 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 54 View decorView = getWindow().getDecorView(); 55 decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 56 setContentView(R.layout.activity_splash); 57 } 58 59 @Override 60 protected void onResume() { 61 super.onResume(); 62 63 appUpdateManager 64 .getAppUpdateInfo() 65 .addOnSuccessListener( 66 appUpdateInfo -> { 67 //基本的に「1」と表示される。ダイアログは表示されない。 68 Log.d("loglog", "" + appUpdateInfo.updateAvailability()); 69 if (appUpdateInfo.updateAvailability() 70 == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) { 71 // If an in-app update is already running, resume the update. 72 try { 73 appUpdateManager.startUpdateFlowForResult( 74 appUpdateInfo, 75 IMMEDIATE, 76 this, 77 MY_REQUEST_CODE); 78 } catch (IntentSender.SendIntentException e) { 79 e.printStackTrace(); 80 } 81 } 82 }); 83 84 mHandler = new Handler(); 85 mHandler.postDelayed(new Runnable() { 86 @Override 87 public void run() { 88 //スプラッシュActivityからトップ画面Activityに遷移する処理 89 startActivity(TopActivity.getStartIntent(SplashActivity.this)); 90 finish(); 91 } 92 }, AppConstants.SPLASH_ANIMATION_INTERVAL); 93 } 94 95 @Override 96 protected void onPause() { 97 super.onPause(); 98 if (mHandler != null) { 99 mHandler = null; 100 } 101 } 102 103 @Override 104 public void onActivityResult(int requestCode, int resultCode, Intent data) { 105 if (requestCode == MY_REQUEST_CODE) { 106 if (resultCode != RESULT_OK) { 107 Log.i("update", "Update flow failed! Result code: " + resultCode); 108 } 109 } 110 } 111 112 @Override 113 protected void onStop() { 114 super.onStop(); 115 } 116 117 @Override 118 public void onBackPressed() { 119 } 120} 121 122
- build.gradle
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation files('libs/commons-lang3-3.8.1.jar') implementation 'com.google.android.play:core:1.6.0' }
試したこと
- play:core:1.6.0をplay:core:1.6.3(最新)にしても表示されない。
- google play consoleで内部テストとして、バージョンに1つ分差があるapkを2つアップロードし、内部テストURLを押下して端末にインストールするという流れでテストいている。
【参考サイト】
補足情報(FW/ツールのバージョンなど)
- AndroidStudio3.0.1
- JRE1.8.0.152
- 検証端末Android9
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。