ブロードキャストレシーバを使用してアプリケーションがアップグレードされたことを検出して、アプリケーションクラスにブール値を設定しようとしています。このブール値は、EULAダイアログボックスをユーザーに表示するかどうかを決定するために、いくつかのブール値と組み合わせて使用されます。Androidアプリのアップグレードを検出し、EULAの表示/非表示のアプリケーションクラスのブール値を設定します
私はそれを正しく設定しましたが、EULAはそれがしてはいけないときにはまだ表示されています。特に、ユーザーが以前のバージョンでEULAを既に受け入れている場合、EULAはアップグレードするバージョンで(私によって手動で設定された)変更されず、アプリケーションはアップグレードされています。
私のアプリケーションが実行されていないため、isAppUpgrade()メソッドが呼び出されておらず、正しいブール値フラグが設定されていないためです。誰かがこれを認めることができますか、または私のコードに何か間違っていますか?
FYI - EULA.show(Activity、boolean、boolean)静的メソッドは、私のメインアクティビティで最初に呼び出されています。
ここではいくつかのコード
アプリケーションクラス
public class MFCApplication extends Application {
private boolean isUpgrade = false;
/**
* Returns a manually set value of whether the EULA has changed in this version of the App
* @return true/false
*/
public boolean hasEULAChanged() {
return false;
}
/**
* Returns whether or not the application has been upgraded. Set by the UpgradeBroadcastReceiver
* @return true/false
*/
public boolean isAppUpgrade() {
return isUpgrade;
}
/**
* Method called by UpgradeBroadcastReceiver if the App has been upgraded
*/
public void setAppIsUpgrade() {
this.isUpgrade = true;
}
}
BroadcastReceiver
public class UpgradeBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null)
return;
if (context == null)
return;
String action = intent.getAction();
if (action == null)
return;
if (action.equals(Intent.ACTION_PACKAGE_REPLACED)) {
MFCApplication myApp = ((MFCApplication)((Activity)context).getApplication());
myApp.setAppIsUpgrade();
}
}
}
EULAクラス
ですpublic class EULA {
private static final String EULA_ASSET = "EULA";
private static final String EULA_PREFERENCES = "eula";
private static Activity mActivity;
private static PackageInfo getPackageInfo() {
PackageInfo pi = null;
try {
pi = mActivity.getPackageManager().getPackageInfo(mActivity.getPackageName(), PackageManager.GET_ACTIVITIES);
} catch (PackageManager.NameNotFoundException ex) {
ex.printStackTrace();
}
return pi;
}
public static boolean show(Activity activity, boolean hasEULAChanged, boolean isAppUpgrade) {
mActivity = activity;
final SharedPreferences preferences = activity.getSharedPreferences(EULA_PREFERENCES, Activity.MODE_PRIVATE);
final PackageInfo packageInfo = getPackageInfo();
String eulaPref = preferences.getString(EULA_PREFERENCES, "0");
boolean eulaVersionAccepted = packageInfo.versionName.equals(eulaPref);
if (!eulaVersionAccepted && (hasEULAChanged || !isAppUpgrade)) {
//The EULA should be shown here, but it isn't
return false;
}
return true;
}
}
アプリケーションマニフェスト
<receiver android:name=".helpers.UpgradeBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.hookedroid.fishingcompanion" />
</intent-filter>
</receiver>
実際に私は、アプリケーションが置き換えられているときにインテントを取得しますが、多分それはEclipseだけでアプリをインストールするためですか? –