2015-05-28 4 views
0

Я хочу установитьOnGoing на мой метод уведомления на false, когда CheckBox не отмечен, но мой код не работает. Я новичок в уведомлениях на Android, но я немного знаком с Android и Java. Спасибо за помощь. (Если бы добавить детали, как StackOverflow напросился)Как установитьOnGoing (false), если CheckBox не установлен?

Вот мой код:

package com.arvisapps.lazyscreenshot; 

import android.app.Activity; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 


public class MainActivity extends Activity { 


NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 

private void showNotification() { 
    builder.setAutoCancel(false); 
    builder.setContentTitle("Take Screenshot"); 
    builder.setContentText(""); 
    builder.setSmallIcon(R.drawable.ic_notification); 
    builder.setOngoing(true); 

    Notification notification = builder.build(); 
    NotificationManager manager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(1, notification); 
} 

private void dontShowNotification(){ 
    builder.setOngoing(false); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    CheckBox cb1 = (CheckBox) findViewById(R.id.cb_1); 

    cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      if (isChecked == true) { 
       showNotification(); 
      } 

      else if(isChecked == false) 
      { 
       dontShowNotification(); 
      } 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


} 
+0

К сожалению никогда ума я вижу, что вы хотите удалить уведомление? – Xjasz

+0

Да, это то, что я хочу, но даже не промахнувшись после снятия отметки. – 4127157

+0

Скажите, если это работает – Xjasz

ответ

1

ли это очистить прошлые уведомления

NotificationManager nMgr = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE); 
nMgr.cancel(notifyId); <-----this integer needs to be the same as the one shown. 

Просто запустите тот же оператор, но с ложным. Он заменит старое уведомление, если вы используете одно и то же целое число.

private void dontShowNotification(){ 
    builder.setOngoing(false); 
    builder.setAutoCancel(false); 
    builder.setContentTitle("Take Screenshot"); 
    builder.setContentText(""); 
    builder.setSmallIcon(R.drawable.ic_notification); 
    Notification notification = builder.build(); 
    NotificationManager manager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(1, notification); 
} 

Даже лучший способ

private void showNotification(boolean b) { 
    builder.setAutoCancel(false); 
    builder.setContentTitle("Take Screenshot"); 
    builder.setContentText(""); 
    builder.setSmallIcon(R.drawable.ic_notification); 
    builder.setOngoing(b); 

    Notification notification = builder.build(); 
    NotificationManager manager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(1, notification); 
} 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    CheckBox cb1 = (CheckBox) findViewById(R.id.cb_1); 

    cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      showNotification(isChecked); 
     } 
    } 
}); 
} 
+0

Работает. Можете ли вы рассказать мне, как снять его, сняв флажок? Спасибо – 4127157

+0

Его заменяет старое уведомление каждый раз. Если вы меняете manager.notify (1, уведомление); этому менеджеру. не уведомлять (2, уведомление); он просто сделал бы 2 из них – Xjasz

+0

Да, что я знаю. Я хочу сказать, когда я поставлю флажок, он должен показать неустранимое уведомление. Но при неконтролируемом уведомлении уведомление должно исчезнуть. – 4127157

Смежные вопросы