Push-уведомление с помощью кнопки переключения материалов

#java #android-studio #android-togglebutton

Вопрос:

что я делаю ?

Я в основном создаю кнопку переключения, которая отправляет уведомление, когда статус проверки соответствует действительности.

что было сделано до сих пор?

в Activity_setting.xml

 lt;com.google.android.material.switchmaterial.SwitchMaterial  android:id="@ id/toggleButtonAlert"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_marginStart="4dp"  android:checked="true" /gt;  

скриншот

в SettingActivity.java

 public class SettingsActivity extends AppCompatActivity {    SharedPreferences notificationsPreferences;  SharedPreferences eScoreAlertPreferences;  SharedPreferences.Editor escoreEditor;  SwitchMaterial toggleButtonAlert;    @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);  setContentView(R.layout.activity_settings);  toggleButtonAlert = findViewById(R.id.toggleButtonAlert);  toggleButtonAlert.setOnCheckedChangeListener((buttonView, isChecked) -gt; {  if (isChecked) {  eScoreAlertPreferences = getSharedPreferences("AlertLastChange", Context.MODE_PRIVATE);   escoreEditor= eScoreAlertPreferences.edit();  editor.putBoolean("key_ToggleValue", true).commit(); // Saving boolean - true/false   } else {  eScoreAlertPreferences = getSharedPreferences("AlertLastChange", Context.MODE_PRIVATE);  escoreEditor= eScoreAlertPreferences.edit();  editor.putBoolean("key_ToggleValue", false).commit(); // Saving boolean - true/false  }   });   } }  

извлекать значения в FeedActivity.java(другой класс java) и вызов функции push-уведомления

 public class FeedActivity extends AppCompatActivity {    private Boolean AlertStat;  public NotificationManager notificationManager;     @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);  View v2 = inflater.inflate(R.layout.fragment_feed, container, false);  SharedPreferences prefs=context.getSharedPreferences("AlertLastChange", Context.MODE_PRIVATE);  AlertStat = prefs.getBoolean("key_ToggleValue", true);  makePushEscoreNotification();   }    private void makePushEscoreNotification() {    if (AlertStat) {  String channelId = "1234";  NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId)  .setSmallIcon(R.mipmap.ic_launcher)  .setContentTitle("sometitle")  .setStyle(new NotificationCompat.BigTextStyle()  .bigText("Some text"))  .setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE  "://"  context.getPackageName() "/" R.raw.negativetone))  .setVibrate(new long[]{0L});   notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);  if (Build.VERSION.SDK_INT gt;= Build.VERSION_CODES.O) {  NotificationChannel channel = new NotificationChannel(channelId, "ReviewProbe",NotificationManager.IMPORTANCE_HIGH);  assert notificationManager != null;  notificationManager.createNotificationChannel(channel);   }  assert notificationManager != null;  builder.setPriority(NotificationCompat.PRIORITY_HIGH);  notificationManager.notify(0, builder.build());   }   } }  

Проблема: что пошло не так ? кнопка переключения не сохраняет состояние и всегда включена, даже если мы пытаемся отключить ее вручную . раздел отправки уведомлений работает нормально

Комментарии:

1. Вы должны окончательно использовать константы для строк, которые используются чаще, например, ваш ключ общих предпочтений

2. да , да, тай , за твой вклад, я буду

Ответ №1:

Задание Активности:

 private boolean isSwitchOpenNotification;    @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);   switchNotification.setClickable(false);    switchNotification.setOnTouchListener(new View.OnTouchListener() {  @Override  public boolean onTouch(View v, MotionEvent event) {    goToNotificationSettings();    return false;  }  });  }  private void verifyNotificationSetting() {     if (NotificationManagerCompat.from(baseActivity) != null) {  isSwitchOpenNotification = NotificationManagerCompat.from(baseActivity).areNotificationsEnabled();  ObLogger.i(TAG, "onResume: Notification is gt;gt; "   isSwitchOpenNotification);   // add store value isSwitchOpenNotification in SharedPreferences.   if (isSwitchOpenNotification) {  switchNotification.setChecked(true);  } else {  switchNotification.setChecked(false);  }  }    }   private void goToNotificationSettings() {      if (Build.VERSION.SDK_INT gt;= Build.VERSION_CODES.LOLLIPOP) {  Intent intent = new Intent();  intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");   //for Android 5-7  intent.putExtra("app_package", baseActivity.getPackageName());  intent.putExtra("app_uid", baseActivity.getApplicationInfo().uid);   // for Android 8 and above  intent.putExtra("android.provider.extra.APP_PACKAGE", baseActivity.getPackageName());  startActivity(intent);  } else {   // for API Level 17,18,19,20  ObLogger.i(TAG, "onTouch: Notification open....");  Intent intent = new Intent();  intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  intent.addCategory(Intent.CATEGORY_DEFAULT);  intent.setData(Uri.parse("package:"   baseActivity.getPackageName()));  startActivity(intent);   }    }  @Override public void onResume() {  super.onResume();  ObLogger.i(TAG, "onResume: ");   verifyNotificationSetting();   }  

Комментарии:

1. вы тестировали этот код раньше? что такое AppUtils и isAdded() здесь?

2. удалите эту строку.

3. обновите мой ответ, пожалуйста, проверьте его

4. этот код приводит меня к настройке уведомлений приложения при нажатии кнопки переключения, и кнопка переключения зависает включенной

5. что я хотел , так это уведомление о push-сообщениях с опцией включения/выключения, поэтому , когда состояние переключения является истинным , уведомление о push-сообщениях включено, тогда как в случае ложного , оно просто сохраняет состояние кнопки переключения в общих общих настройках