Обнаружить обновление приложения Android и установить логическое значение класса приложения для отображения / скрытия EULA

Я пытаюсь определить, когда мое приложение было обновлено с помощью BroadcastReceiver, и установить логическое значение в моем классе приложения. Это логическое значение будет использоваться вместе с несколькими другими логическими значениями, чтобы определить, показывать ли пользователю диалоговое окно EULA.

Я полагаю, что все это настроено правильно, но EULA все еще отображается, когда оно не должен. В частности, когда пользователь уже принял лицензионное соглашение в предыдущей версии, лицензионное соглашение не изменилось в версии, которая обновляется до (устанавливается вручную мной), и приложение обновляется.

Я считаю, что причина этого не в t работает потому, что мое приложение не запущено, и поэтому метод 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>
35
задан hooked82 5 August 2011 в 07:03
поделиться