Android - 在共享首选项中点击通知保存字符串

Android - on click notification save string in Shared Preferences

我在 Android 开发方面仍然不是很好,我正在尝试弄清楚如何在之后触发某些操作(在我的情况下,我想在共享首选项中保存一个变量)我单击 Android 中的通知。

我目前有这个代码:

private void startForegroundService() {
        Log.d(TAG, "Start " + NOTIFICATION_CHANNEL_NAME + " foreground service");
        setNotificationLanguage();
        Intent notificationIntent = new Intent(this, MainActivity.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
        builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
                .setSmallIcon(getResourceIdForResourceName(this, "ic_stat_show_chart"))
                .setSound(null)
                .setContentTitle(NOTIFICATION_CHANNEL_NAME)
                .setContentText(NOTIFICATION_CHANNEL_DESC)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setContentIntent(pendingIntent);
        Notification notification = builder.build();
}

当我单击通知时,我启动了 MainActivity class,这也是我想要的。但我还想在单击通知时在共享首选项中保存一个字符串。我已经搜索过但一无所获。如果有人可以提供帮助,我将不胜感激。谢谢:)

尝试在您的主要活动中执行以下操作:

Intent intent = getIntent();
if (intent.hasExtras()){
   //Saved notification has been clicked to shared preferences
}

希望这可能有所帮助

你可以给intent传递参数,在MainActivity中检查intent是否有参数 Passing arguments to intent android

notificationIntent 中添加您想要将 sharedpref 另存为额外的字符串值,如下所示。

notificationIntent.putExtra("Key","Value");

您将能够在 Activity 的 onCreate 中提取它。

 String value = getIntent().getStringArrayExtra("Key");

注意:如果你只是想知道activity是否被通知打开,只需在intent中传递任何常量值并检查你是否在onCreate 使用上述方法,这样您就可以确定 activity 是通过通知启动的。只要确保在那种情况下不要使用相同的 key/value 组合作为相同的 activity 意图的额外组合,以便从通知 pendingIntent 流以外的任何其他地方启动它。

正如 Keshav 所解释的,您可以从意图中获取数据并将其存储在 sharedpreferences 中,这里是 SharedPreferenceHelper class。

public class SharedPreferenceHelper {

 private static final String STRING_NAME = "your_string_name";

 public SharedPreferenceHelper(Context context) {
    mPreferences = PreferenceManager.getDefaultSharedPreferences(context);
  }

 public void setString(String your_string){
    mPreferences.edit().putString(STRING_NAME,your_string).apply();
}

public String getString(){
    return mPreferences.getString(STRING_NAME,null);
}

}

在 MainActivity 中,

public class MainActivity extends AppCompatActivity{

 Bundle mBundle;
 SharedPreferenceHelper mSharedPreferenceHelper;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSharedPreferenceHelper = new SharedPreferenceHelper(this);
    mBundle = getIntent().getExtras();

    if(mBundle != null){
     mSharedPreferenceHelper.setString(mBundle.getString("your_string_data"));
     }

}

如果 activity 已经创建,

@Override
protected void onResume() {
    super.onResume();
  if(mBundle != null){
     mSharedPreferenceHelper.setString(mBundle.getString("your_string_data"));
     }
}

enter code here

如果您有任何问题,请告诉我。

重写 MainActivity 中的 onNewIntent 方法

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("KEY", "str value"); //change this according to your need
    editor.apply();
}