アクティビティの以前のインスタンスを再利用するフラグを設定することで、通知の PendingIntent を変更できます。
何かのようなもの:
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_CLEAR_TOP);
PendingIntent pending = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT
SharedPreferences が onResume() にロードされるようにアクティビティを変更することもできます。このメソッドは、アクティビティの作成および再開中に実行されます。
編集: データを失うことについてのコメントに従って、次の追加コードを提供します。このコードを AsyncTask で使用していますが、永続性に問題はありません。
public final class PreferenceUtils
{
private static final String TAG = PreferenceUtils.class.getSimpleName();
public static final String SESSION_ID = "sessionId"; //$NON-NLS-1$
public static final String NAME = "name"; //$NON-NLS-1$
private PreferenceUtils()
{
// enforcing singleton
super();
}
/**
* Set sessionId in app preferences to the supplied value.
*
* @param context
* @param sessionId
*/
public static void setSessionId(final Context context, final String sessionId)
{
final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
final Editor editor = settings.edit();
editor.putString(PreferenceUtils.SESSION_ID, sessionId);
editor.commit();
if (BuildConfig.DEBUG)
{
Log.d(PreferenceUtils.TAG, "Setting sessionId: " + sessionId); //$NON-NLS-1$
}
}
/**
* Get the current session id
*
* @param context
* @return session id or null on not activated
*/
public static String getSessionId(final Context context)
{
final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
return settings.getString(PreferenceUtils.SESSION_ID, null);
}
/**
* Get current name stored in the app preferences
*
* @param context
* @return
*/
public static String getName(final Context context)
{
final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
return settings.getString(PreferenceUtils.NAME, null);
}
/**
* Set name in app preferences to the supplied value.
*
* @param context
* @param name
*/
public static void setName(final Context context, final String name)
{
final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
final Editor editor = settings.edit();
editor.putString(PreferenceUtils.NAME, name);
editor.commit();
if (BuildConfig.DEBUG)
{
Log.d(PreferenceUtils.TAG, "Setting name: " + name); //$NON-NLS-1$
}
}
}